fix: stabilize HartOMat runtime startup
This commit is contained in:
@@ -134,6 +134,7 @@ TEMPLATES = [
|
||||
|
||||
|
||||
async def seed(db_url: str, admin_email: str = "admin@hartomat.com", admin_password: str = "Admin1234!"):
|
||||
from app.domains.tenants.models import Tenant
|
||||
from app.models.template import Template
|
||||
from app.models.user import User, UserRole
|
||||
from app.utils.auth import hash_password
|
||||
@@ -142,6 +143,17 @@ async def seed(db_url: str, admin_email: str = "admin@hartomat.com", admin_passw
|
||||
session_factory = async_sessionmaker(engine, expire_on_commit=False)
|
||||
|
||||
async with session_factory() as session:
|
||||
# Ensure the default single-tenant setup exists before seeding tenant-scoped data.
|
||||
tenant_result = await session.execute(select(Tenant).where(Tenant.slug == "hartomat"))
|
||||
default_tenant = tenant_result.scalar_one_or_none()
|
||||
if not default_tenant:
|
||||
default_tenant = Tenant(name="HartOMat", slug="hartomat", is_active=True)
|
||||
session.add(default_tenant)
|
||||
await session.flush()
|
||||
print(" + Default tenant: hartomat")
|
||||
else:
|
||||
print(" ~ Default tenant already exists: hartomat")
|
||||
|
||||
# Seed templates
|
||||
for tpl_data in TEMPLATES:
|
||||
result = await session.execute(
|
||||
@@ -149,24 +161,32 @@ async def seed(db_url: str, admin_email: str = "admin@hartomat.com", admin_passw
|
||||
)
|
||||
existing = result.scalar_one_or_none()
|
||||
if not existing:
|
||||
tpl = Template(**tpl_data)
|
||||
tpl = Template(**tpl_data, tenant_id=default_tenant.id)
|
||||
session.add(tpl)
|
||||
print(f" + Template: {tpl_data['category_key']}")
|
||||
else:
|
||||
if existing.tenant_id is None:
|
||||
existing.tenant_id = default_tenant.id
|
||||
print(f" * Backfilled template tenant: {tpl_data['category_key']}")
|
||||
print(f" ~ Template already exists: {tpl_data['category_key']}")
|
||||
|
||||
# Seed admin user
|
||||
result = await session.execute(select(User).where(User.email == admin_email))
|
||||
if not result.scalar_one_or_none():
|
||||
existing_admin = result.scalar_one_or_none()
|
||||
if not existing_admin:
|
||||
admin = User(
|
||||
email=admin_email,
|
||||
password_hash=hash_password(admin_password),
|
||||
role=UserRole.global_admin,
|
||||
full_name="HartOMat Admin",
|
||||
tenant_id=default_tenant.id,
|
||||
)
|
||||
session.add(admin)
|
||||
print(f" + Admin user: {admin_email}")
|
||||
else:
|
||||
if existing_admin.tenant_id is None:
|
||||
existing_admin.tenant_id = default_tenant.id
|
||||
print(f" * Backfilled admin tenant: {admin_email}")
|
||||
print(f" ~ Admin user already exists: {admin_email}")
|
||||
|
||||
await session.commit()
|
||||
|
||||
Reference in New Issue
Block a user