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)
|
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})
|
||||||
|
|||||||
@ -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;">
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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)}")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user