Files

108 lines
2.6 KiB
Python
Raw Permalink Normal View History

2025-10-03 14:09:34 +02:00
"""
API Schemas for Demo Session Service
"""
from pydantic import BaseModel, Field
from typing import Optional, Dict, Any
from datetime import datetime
class DemoSessionCreate(BaseModel):
"""Create demo session request"""
demo_account_type: str = Field(..., description="professional or enterprise")
subscription_tier: Optional[str] = Field(None, description="Force specific subscription tier (professional/enterprise)")
2025-10-03 14:09:34 +02:00
user_id: Optional[str] = Field(None, description="Optional authenticated user ID")
ip_address: Optional[str] = None
user_agent: Optional[str] = None
2026-01-17 09:19:42 +01:00
class DemoUser(BaseModel):
"""Demo user data returned in session response"""
id: str
email: str
full_name: str
role: str
is_active: bool
is_verified: bool
tenant_id: str
created_at: str
class DemoTenant(BaseModel):
"""Demo tenant data returned in session response"""
id: str
name: str
subdomain: str
subscription_tier: str
tenant_type: str
business_type: Optional[str] = None
business_model: Optional[str] = None
description: Optional[str] = None
is_active: bool
2025-10-03 14:09:34 +02:00
class DemoSessionResponse(BaseModel):
2026-01-17 09:19:42 +01:00
"""Demo session response - mirrors a real login response with user and tenant data"""
2025-10-03 14:09:34 +02:00
session_id: str
virtual_tenant_id: str
demo_account_type: str
status: str
created_at: datetime
expires_at: datetime
demo_config: Dict[str, Any]
session_token: str
2026-01-17 09:19:42 +01:00
subscription_tier: str
is_enterprise: bool
# Complete user and tenant data (like a real login response)
user: DemoUser
tenant: DemoTenant
2025-10-03 14:09:34 +02:00
class Config:
from_attributes = True
class DemoSessionExtend(BaseModel):
"""Extend session request"""
session_id: str
class DemoSessionDestroy(BaseModel):
"""Destroy session request"""
session_id: str
class DemoSessionStats(BaseModel):
"""Demo session statistics"""
total_sessions: int
active_sessions: int
expired_sessions: int
destroyed_sessions: int
avg_duration_minutes: float
total_requests: int
class DemoAccountInfo(BaseModel):
"""Public demo account information"""
account_type: str
name: str
email: str
password: str
description: str
features: list[str]
business_model: str
class CloneDataRequest(BaseModel):
"""Request to clone tenant data"""
base_tenant_id: str
virtual_tenant_id: str
session_id: str
class CloneDataResponse(BaseModel):
"""Response from data cloning"""
session_id: str
services_cloned: list[str]
total_records: int
redis_keys: int