Refactor database operations in SaaS controller and restaurant model for improved clarity and functionality

This commit is contained in:
Alaguraj0361 2026-06-22 18:04:36 +05:30
parent b9d5617051
commit 6a2bc89fb6
4 changed files with 15 additions and 10 deletions

View File

@ -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})

View File

@ -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;">

View File

@ -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

View File

@ -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)}")