2025-10-03 14:09:34 +02:00
|
|
|
"""
|
|
|
|
|
Demo Session Service Configuration
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
from typing import Optional
|
2025-11-30 08:48:56 +01:00
|
|
|
from shared.config.base import BaseServiceSettings
|
2025-10-03 14:09:34 +02:00
|
|
|
|
|
|
|
|
|
2025-11-30 08:48:56 +01:00
|
|
|
class Settings(BaseServiceSettings):
|
2025-10-03 14:09:34 +02:00
|
|
|
"""Demo Session Service Settings"""
|
|
|
|
|
|
2025-11-30 08:48:56 +01:00
|
|
|
# Service info (override base settings)
|
|
|
|
|
APP_NAME: str = "Demo Session Service"
|
2025-10-03 14:09:34 +02:00
|
|
|
SERVICE_NAME: str = "demo-session"
|
|
|
|
|
VERSION: str = "1.0.0"
|
2025-11-30 08:48:56 +01:00
|
|
|
DESCRIPTION: str = "Demo session management and orchestration service"
|
2025-10-03 14:09:34 +02:00
|
|
|
|
2025-11-30 08:48:56 +01:00
|
|
|
# Database (override base property)
|
|
|
|
|
@property
|
|
|
|
|
def DATABASE_URL(self) -> str:
|
|
|
|
|
"""Build database URL from environment"""
|
|
|
|
|
return os.getenv(
|
|
|
|
|
"DEMO_SESSION_DATABASE_URL",
|
|
|
|
|
"postgresql+asyncpg://postgres:postgres@localhost:5432/demo_session_db"
|
|
|
|
|
)
|
2025-10-03 14:09:34 +02:00
|
|
|
|
2025-11-30 08:48:56 +01:00
|
|
|
# Redis configuration (demo-specific)
|
2025-10-03 14:09:34 +02:00
|
|
|
REDIS_KEY_PREFIX: str = "demo:session"
|
|
|
|
|
REDIS_SESSION_TTL: int = 1800 # 30 minutes
|
|
|
|
|
|
|
|
|
|
# Demo session configuration
|
|
|
|
|
DEMO_SESSION_DURATION_MINUTES: int = 30
|
|
|
|
|
DEMO_SESSION_MAX_EXTENSIONS: int = 3
|
|
|
|
|
DEMO_SESSION_CLEANUP_INTERVAL_MINUTES: int = 60
|
|
|
|
|
|
|
|
|
|
# Demo account credentials (public)
|
2026-01-17 09:19:42 +01:00
|
|
|
# Contains complete user, tenant, and subscription data matching fixture files
|
2025-10-03 14:09:34 +02:00
|
|
|
DEMO_ACCOUNTS: dict = {
|
2025-11-30 08:48:56 +01:00
|
|
|
"professional": {
|
|
|
|
|
"email": "demo.professional@panaderiaartesana.com",
|
|
|
|
|
"name": "Panadería Artesana Madrid - Demo",
|
|
|
|
|
"subdomain": "demo-artesana",
|
|
|
|
|
"base_tenant_id": "a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6",
|
|
|
|
|
"subscription_tier": "professional",
|
2026-01-17 09:19:42 +01:00
|
|
|
"tenant_type": "standalone",
|
|
|
|
|
# User data from fixtures/professional/01-tenant.json
|
|
|
|
|
"user": {
|
|
|
|
|
"id": "c1a2b3c4-d5e6-47a8-b9c0-d1e2f3a4b5c6",
|
|
|
|
|
"email": "maria.garcia@panaderiaartesana.com",
|
|
|
|
|
"full_name": "María García López",
|
|
|
|
|
"role": "owner",
|
|
|
|
|
"is_active": True,
|
|
|
|
|
"is_verified": True
|
|
|
|
|
},
|
|
|
|
|
# Tenant data
|
|
|
|
|
"tenant": {
|
|
|
|
|
"business_type": "bakery",
|
|
|
|
|
"business_model": "production_retail",
|
|
|
|
|
"description": "Professional tier demo tenant for bakery operations"
|
|
|
|
|
}
|
2025-10-03 14:09:34 +02:00
|
|
|
},
|
2025-11-30 08:48:56 +01:00
|
|
|
"enterprise": {
|
2025-12-17 15:48:14 +01:00
|
|
|
"email": "central@panaderiaartesana.es",
|
|
|
|
|
"name": "Panadería Artesana España - Central",
|
|
|
|
|
"subdomain": "artesana-central",
|
2025-12-13 23:57:54 +01:00
|
|
|
"base_tenant_id": "80000000-0000-4000-a000-000000000001",
|
2025-11-30 08:48:56 +01:00
|
|
|
"subscription_tier": "enterprise",
|
|
|
|
|
"tenant_type": "parent",
|
2026-01-17 09:19:42 +01:00
|
|
|
# User data from fixtures/enterprise/parent/01-tenant.json
|
|
|
|
|
"user": {
|
|
|
|
|
"id": "d2e3f4a5-b6c7-48d9-e0f1-a2b3c4d5e6f7",
|
|
|
|
|
"email": "director@panaderiaartesana.es",
|
|
|
|
|
"full_name": "Director",
|
|
|
|
|
"role": "owner",
|
|
|
|
|
"is_active": True,
|
|
|
|
|
"is_verified": True
|
|
|
|
|
},
|
|
|
|
|
# Tenant data
|
|
|
|
|
"tenant": {
|
|
|
|
|
"business_type": "bakery_chain",
|
|
|
|
|
"business_model": "multi_location",
|
|
|
|
|
"description": "Central production facility and parent tenant for multi-location bakery chain"
|
|
|
|
|
},
|
2025-11-30 08:48:56 +01:00
|
|
|
"children": [
|
|
|
|
|
{
|
2025-12-17 15:48:14 +01:00
|
|
|
"name": "Madrid - Salamanca",
|
2025-12-13 23:57:54 +01:00
|
|
|
"base_tenant_id": "A0000000-0000-4000-a000-000000000001",
|
2025-12-17 15:48:14 +01:00
|
|
|
"location": {"city": "Madrid", "zone": "Salamanca", "latitude": 40.4284, "longitude": -3.6847},
|
|
|
|
|
"description": "Premium location in upscale Salamanca district"
|
2025-11-30 08:48:56 +01:00
|
|
|
},
|
|
|
|
|
{
|
2025-12-17 15:48:14 +01:00
|
|
|
"name": "Barcelona - Eixample",
|
2025-12-13 23:57:54 +01:00
|
|
|
"base_tenant_id": "B0000000-0000-4000-a000-000000000001",
|
2025-12-17 15:48:14 +01:00
|
|
|
"location": {"city": "Barcelona", "zone": "Eixample", "latitude": 41.3947, "longitude": 2.1616},
|
|
|
|
|
"description": "High-volume tourist and local area in central Barcelona"
|
2025-11-30 08:48:56 +01:00
|
|
|
},
|
|
|
|
|
{
|
2025-12-17 15:48:14 +01:00
|
|
|
"name": "Valencia - Ruzafa",
|
2025-12-13 23:57:54 +01:00
|
|
|
"base_tenant_id": "C0000000-0000-4000-a000-000000000001",
|
2025-12-17 15:48:14 +01:00
|
|
|
"location": {"city": "Valencia", "zone": "Ruzafa", "latitude": 39.4623, "longitude": -0.3645},
|
|
|
|
|
"description": "Trendy artisan neighborhood with focus on quality"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "Seville - Triana",
|
|
|
|
|
"base_tenant_id": "D0000000-0000-4000-a000-000000000001",
|
|
|
|
|
"location": {"city": "Seville", "zone": "Triana", "latitude": 37.3828, "longitude": -6.0026},
|
|
|
|
|
"description": "Traditional Andalusian location with local specialties"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"name": "Bilbao - Casco Viejo",
|
|
|
|
|
"base_tenant_id": "E0000000-0000-4000-a000-000000000001",
|
|
|
|
|
"location": {"city": "Bilbao", "zone": "Casco Viejo", "latitude": 43.2567, "longitude": -2.9272},
|
|
|
|
|
"description": "Basque region location with focus on quality and local culture"
|
2025-11-30 08:48:56 +01:00
|
|
|
}
|
|
|
|
|
]
|
2025-10-03 14:09:34 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-30 08:48:56 +01:00
|
|
|
# Service URLs - these are inherited from BaseServiceSettings
|
|
|
|
|
# but we can override defaults if needed:
|
|
|
|
|
# - GATEWAY_URL (inherited)
|
|
|
|
|
# - AUTH_SERVICE_URL, TENANT_SERVICE_URL, etc. (inherited)
|
|
|
|
|
# - JWT_SECRET_KEY, JWT_ALGORITHM (inherited)
|
|
|
|
|
# - LOG_LEVEL (inherited)
|
2025-10-03 14:09:34 +02:00
|
|
|
|
|
|
|
|
class Config:
|
|
|
|
|
env_file = ".env"
|
|
|
|
|
case_sensitive = True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
settings = Settings()
|