fix: stabilize HartOMat runtime startup
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
"""Backfill persisted Schaeffler branding to HartOMat.
|
||||
|
||||
Revision ID: 063
|
||||
Revises: 062
|
||||
Revises: a68e8c6fb61b
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
revision = "063"
|
||||
down_revision = "062"
|
||||
down_revision = "a68e8c6fb61b"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
name: hartomat
|
||||
|
||||
# External render-worker configuration.
|
||||
#
|
||||
# Use this compose file on remote machines (GPU nodes, NAS, cloud VMs) that
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
name: hartomat
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
|
||||
Reference in New Issue
Block a user