Skip to content

Commit cdc513e

Browse files
committed
feat: seed default tenant on startup
1 parent 80b5f37 commit cdc513e

2 files changed

Lines changed: 38 additions & 0 deletions

File tree

src/core/lifespan.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from src.core.bootstrap.event import register_event_handlers
77
from src.core.config.setting import get_settings
88
from src.core.database.postgres.session import engine
9+
from src.core.seed.tenant import seed_default_tenant
910
from src.core.dependency.rate_limit import close_rate_limiter, init_rate_limiter
1011
from src.core.telemetry.metrics import APP_INFO
1112
from src.core.telemetry.tracing import shutdown_tracing
@@ -33,6 +34,7 @@ async def lifespan(app: FastAPI):
3334

3435
await init_rate_limiter()
3536
register_event_handlers()
37+
await seed_default_tenant()
3638

3739
yield
3840

src/core/seed/tenant.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from uuid import uuid4
2+
3+
from sqlalchemy import select
4+
5+
from src.core.config.setting import get_settings
6+
from src.core.database.postgres.session import AsyncSessionLocal
7+
from src.core.middleware.tenant import set_default_tenant_id
8+
from src.modules.tenants.infrastructure.models.tenant_model import TenantModel
9+
10+
DEFAULT_TENANT_SLUG = "default"
11+
12+
13+
async def seed_default_tenant() -> None:
14+
settings = get_settings()
15+
if settings.MULTITENANT_ENABLED:
16+
return
17+
18+
async with AsyncSessionLocal() as session:
19+
result = await session.execute(
20+
select(TenantModel).where(TenantModel.slug == DEFAULT_TENANT_SLUG)
21+
)
22+
existing = result.scalar_one_or_none()
23+
if existing:
24+
set_default_tenant_id(existing.id)
25+
return
26+
27+
tenant = TenantModel(
28+
id=uuid4(),
29+
name="Default Tenant",
30+
slug=DEFAULT_TENANT_SLUG,
31+
domain=None,
32+
)
33+
session.add(tenant)
34+
await session.commit()
35+
await session.refresh(tenant)
36+
set_default_tenant_id(tenant.id)

0 commit comments

Comments
 (0)