Improve demo seed
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user