Improve demo seed

This commit is contained in:
Urtzi Alfaro
2025-10-17 07:31:14 +02:00
parent b6cb800758
commit d4060962e4
56 changed files with 8235 additions and 339 deletions

View File

@@ -179,23 +179,122 @@ async def clone_demo_data(
db.add(tenant)
await db.flush() # Flush to get the tenant ID
# Create tenant member record for the demo owner
# Create tenant member records for demo owner and staff
from app.models.tenants import TenantMember
import json
tenant_member = TenantMember(
tenant_id=virtual_uuid,
user_id=demo_owner_uuid,
role="owner",
permissions=json.dumps(["read", "write", "admin"]), # Convert list to JSON string
is_active=True,
invited_by=demo_owner_uuid,
invited_at=datetime.now(timezone.utc),
joined_at=datetime.now(timezone.utc),
created_at=datetime.now(timezone.utc)
)
# Helper function to get permissions for role
def get_permissions_for_role(role: str) -> str:
permission_map = {
"owner": ["read", "write", "admin", "delete"],
"admin": ["read", "write", "admin"],
"production_manager": ["read", "write"],
"baker": ["read", "write"],
"sales": ["read", "write"],
"quality_control": ["read", "write"],
"warehouse": ["read", "write"],
"logistics": ["read", "write"],
"procurement": ["read", "write"],
"maintenance": ["read", "write"],
"member": ["read", "write"],
"viewer": ["read"]
}
permissions = permission_map.get(role, ["read"])
return json.dumps(permissions)
db.add(tenant_member)
# Define staff users for each demo account type (must match seed_demo_tenant_members.py)
STAFF_USERS = {
"individual_bakery": [
# Owner
{
"user_id": uuid.UUID("c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6"),
"role": "owner"
},
# Staff
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000001"),
"role": "baker"
},
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000002"),
"role": "sales"
},
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000003"),
"role": "quality_control"
},
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000004"),
"role": "admin"
},
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000005"),
"role": "warehouse"
},
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000006"),
"role": "production_manager"
}
],
"central_baker": [
# Owner
{
"user_id": uuid.UUID("d2e3f4a5-b6c7-48d9-e0f1-a2b3c4d5e6f7"),
"role": "owner"
},
# Staff
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000011"),
"role": "production_manager"
},
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000012"),
"role": "quality_control"
},
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000013"),
"role": "logistics"
},
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000014"),
"role": "sales"
},
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000015"),
"role": "procurement"
},
{
"user_id": uuid.UUID("50000000-0000-0000-0000-000000000016"),
"role": "maintenance"
}
]
}
# Get staff users for this demo account type
staff_users = STAFF_USERS.get(demo_account_type, [])
# Create tenant member records for all users (owner + staff)
members_created = 0
for staff_member in staff_users:
tenant_member = TenantMember(
tenant_id=virtual_uuid,
user_id=staff_member["user_id"],
role=staff_member["role"],
permissions=get_permissions_for_role(staff_member["role"]),
is_active=True,
invited_by=demo_owner_uuid,
invited_at=datetime.now(timezone.utc),
joined_at=datetime.now(timezone.utc),
created_at=datetime.now(timezone.utc)
)
db.add(tenant_member)
members_created += 1
logger.info(
"Created tenant members for virtual tenant",
virtual_tenant_id=virtual_tenant_id,
members_created=members_created
)
# Clone subscription from template tenant
from app.models.tenants import Subscription
@@ -255,17 +354,21 @@ async def clone_demo_data(
duration_ms=duration_ms
)
records_cloned = 1 + members_created # Tenant + TenantMembers
if template_subscription:
records_cloned += 1 # Subscription
return {
"service": "tenant",
"status": "completed",
"records_cloned": 3 if template_subscription else 2, # Tenant + TenantMember + Subscription (if found)
"records_cloned": records_cloned,
"duration_ms": duration_ms,
"details": {
"tenant_id": str(tenant.id),
"tenant_name": tenant.name,
"business_model": tenant.business_model,
"owner_id": str(demo_owner_uuid),
"member_created": True,
"members_created": members_created,
"subscription_plan": subscription_plan,
"subscription_cloned": template_subscription is not None
}