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) restaurant = request.env['saas.restaurant'].sudo().search([('database_name', '=', db_name)], limit=1)
if not restaurant: if not restaurant:
return self._json_response({'error': 'Restaurant database not found'}, status=404) return self._json_response({'error': 'Restaurant database not found'}, status=404)
try: try:
master_pwd = config.get('admin_passwd', 'admin')
# 1. Drop database in PostgreSQL via Odoo service API # 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 # 2. Delete database registry entry in master
restaurant.unlink() restaurant.unlink()
return self._json_response({'success': True}) return self._json_response({'success': True})

View File

@ -32,7 +32,7 @@
<field name="name">SaaS Welcome Email</field> <field name="name">SaaS Welcome Email</field>
<field name="model_id" ref="dine360_saas_master.model_saas_restaurant"/> <field name="model_id" ref="dine360_saas_master.model_saas_restaurant"/>
<field name="subject">Welcome to your Dine360 Restaurant Platform!</field> <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="email_to">{{ object.email }}</field>
<field name="body_html" type="html"> <field name="body_html" type="html">
<div style="margin: 0px; padding: 0px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"> <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}...") _logger.info(f"Dumping database {db_name} to {temp_filepath}...")
with open(temp_filepath, 'wb') as f: with open(temp_filepath, 'wb') as f:
# Odoo service dump database to stream # 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.") _logger.info("Database dumped successfully.")
# S3 upload logic # S3 upload logic

View File

@ -74,12 +74,19 @@ class SaasRestaurant(models.Model):
raise UserError(f"Database {self.database_name} already exists in PostgreSQL!") raise UserError(f"Database {self.database_name} already exists in PostgreSQL!")
# 1. Provision PostgreSQL database # 1. Provision PostgreSQL database
master_pwd = config.get('admin_passwd', 'admin')
admin_pass = ''.join(random.choices(string.ascii_letters + string.digits, k=12)) admin_pass = ''.join(random.choices(string.ascii_letters + string.digits, k=12))
try: try:
_logger.info(f"Creating database {self.database_name}...") _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.") _logger.info(f"Database {self.database_name} created successfully.")
except Exception as e: except Exception as e:
raise UserError(f"PostgreSQL database creation failed: {str(e)}") raise UserError(f"PostgreSQL database creation failed: {str(e)}")
@ -96,7 +103,7 @@ class SaasRestaurant(models.Model):
with tenant_registry.cursor() as cr: with tenant_registry.cursor() as cr:
env = api.Environment(cr, SUPERUSER_ID, {}) env = api.Environment(cr, SUPERUSER_ID, {})
module_objs = env['ir.module.module'].search([('name', 'in', modules_to_install)]) 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() cr.commit()
# Run immediate install for Odoo base # Run immediate install for Odoo base
module_objs.button_immediate_install() module_objs.button_immediate_install()
@ -127,8 +134,8 @@ class SaasRestaurant(models.Model):
'name': self.owner_name, 'name': self.owner_name,
'login': self.email, 'login': self.email,
'email': self.email, 'email': self.email,
'password': admin_pass,
}) })
admin_user._set_password(admin_pass)
# Set timezone # Set timezone
admin_user.partner_id.tz = self.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 # If provisioning fails midway, drop the database to allow clean retry
_logger.error(f"Failed configuring tenant registry: {str(e)}") _logger.error(f"Failed configuring tenant registry: {str(e)}")
try: try:
db.exp_drop(master_pwd, self.database_name) db.exp_drop(self.database_name)
except Exception: except Exception:
pass pass
raise UserError(f"Database provisioning / module installation failed: {str(e)}") raise UserError(f"Database provisioning / module installation failed: {str(e)}")