Refactor database operations in SaaS controller and restaurant model for improved clarity and functionality
This commit is contained in:
parent
b9d5617051
commit
6a2bc89fb6
@ -134,11 +134,9 @@ class SaasApiController(http.Controller):
|
||||
restaurant = request.env['saas.restaurant'].sudo().search([('database_name', '=', db_name)], limit=1)
|
||||
if not restaurant:
|
||||
return self._json_response({'error': 'Restaurant database not found'}, status=404)
|
||||
|
||||
try:
|
||||
master_pwd = config.get('admin_passwd', 'admin')
|
||||
# 1. Drop database in PostgreSQL via Odoo service API
|
||||
db.exp_drop(master_pwd, db_name)
|
||||
db.exp_drop(db_name)
|
||||
# 2. Delete database registry entry in master
|
||||
restaurant.unlink()
|
||||
return self._json_response({'success': True})
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
<field name="name">SaaS Welcome Email</field>
|
||||
<field name="model_id" ref="dine360_saas_master.model_saas_restaurant"/>
|
||||
<field name="subject">Welcome to your Dine360 Restaurant Platform!</field>
|
||||
<field name="email_from">{{ object.company_id.email or object.env.user.email_formatted }}</field>
|
||||
<field name="email_from">{{ object.env.company.email or object.env.user.email_formatted }}</field>
|
||||
<field name="email_to">{{ object.email }}</field>
|
||||
<field name="body_html" type="html">
|
||||
<div style="margin: 0px; padding: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;">
|
||||
|
||||
@ -51,7 +51,7 @@ class SaasBackup(models.Model):
|
||||
_logger.info(f"Dumping database {db_name} to {temp_filepath}...")
|
||||
with open(temp_filepath, 'wb') as f:
|
||||
# Odoo service dump database to stream
|
||||
db.dump_db(db_name, f, format='zip')
|
||||
db.dump_db(db_name, f, backup_format='zip')
|
||||
_logger.info("Database dumped successfully.")
|
||||
|
||||
# S3 upload logic
|
||||
|
||||
@ -74,12 +74,19 @@ class SaasRestaurant(models.Model):
|
||||
raise UserError(f"Database {self.database_name} already exists in PostgreSQL!")
|
||||
|
||||
# 1. Provision PostgreSQL database
|
||||
master_pwd = config.get('admin_passwd', 'admin')
|
||||
admin_pass = ''.join(random.choices(string.ascii_letters + string.digits, k=12))
|
||||
|
||||
try:
|
||||
_logger.info(f"Creating database {self.database_name}...")
|
||||
db.exp_create_database(master_pwd, self.database_name, False, 'en_US', admin_pass)
|
||||
db.exp_create_database(
|
||||
self.database_name,
|
||||
False,
|
||||
'en_US',
|
||||
user_password=admin_pass,
|
||||
login=self.email,
|
||||
country_code=self.country_id.code if self.country_id else None,
|
||||
phone=self.phone
|
||||
)
|
||||
_logger.info(f"Database {self.database_name} created successfully.")
|
||||
except Exception as e:
|
||||
raise UserError(f"PostgreSQL database creation failed: {str(e)}")
|
||||
@ -96,7 +103,7 @@ class SaasRestaurant(models.Model):
|
||||
with tenant_registry.cursor() as cr:
|
||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||
module_objs = env['ir.module.module'].search([('name', 'in', modules_to_install)])
|
||||
module_objs.write({'state': 'to_install'})
|
||||
module_objs.write({'state': 'to install'})
|
||||
cr.commit()
|
||||
# Run immediate install for Odoo base
|
||||
module_objs.button_immediate_install()
|
||||
@ -127,8 +134,8 @@ class SaasRestaurant(models.Model):
|
||||
'name': self.owner_name,
|
||||
'login': self.email,
|
||||
'email': self.email,
|
||||
'password': admin_pass,
|
||||
})
|
||||
admin_user._set_password(admin_pass)
|
||||
|
||||
# Set timezone
|
||||
admin_user.partner_id.tz = self.timezone
|
||||
@ -138,7 +145,7 @@ class SaasRestaurant(models.Model):
|
||||
# If provisioning fails midway, drop the database to allow clean retry
|
||||
_logger.error(f"Failed configuring tenant registry: {str(e)}")
|
||||
try:
|
||||
db.exp_drop(master_pwd, self.database_name)
|
||||
db.exp_drop(self.database_name)
|
||||
except Exception:
|
||||
pass
|
||||
raise UserError(f"Database provisioning / module installation failed: {str(e)}")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user