| from pydantic import BaseModel, Field | |
| from typing import Dict, List, Literal | |
| from datetime import datetime | |
| import uuid | |
| class Message(BaseModel): | |
| role: Literal["system", "user", "assistant"] | |
| content: str | |
| timestamp: datetime = Field(default_factory=datetime.utcnow) | |
| class Conversation(BaseModel): | |
| uid: str | |
| messages: List[Message] = Field(default_factory=list) | |
| last_interaction: datetime = Field(default_factory=datetime.utcnow) | |
| class GuessingProgress(BaseModel): | |
| indications: list[Message] = Field(default_factory=list) | |
| guesses: list[str] = Field(default_factory=list) | |
| class WagonProgress(BaseModel): | |
| wagon_id: int = 0 | |
| conversations: Dict[str, Conversation] = Field(default_factory=dict) | |
| theme: str = "Tutorial (Start)" | |
| password: str = "start" | |
| class UserSession(BaseModel): | |
| session_id: str = Field(default_factory=lambda: str(uuid.uuid4())) | |
| current_wagon: WagonProgress = Field(default_factory=WagonProgress) | |
| guessing_progress: GuessingProgress = Field(default_factory=GuessingProgress) | |
| created_at: datetime = Field(default_factory=datetime.utcnow) | |
| last_active: datetime = Field(default_factory=datetime.utcnow) | |
| default_game: bool = Field(default=True) | |
| class Config: | |
| json_schema_extra = { | |
| "example": { | |
| "session_id": "550e8400-e29b-41d4-a716-446655440000", | |
| "current_wagon": {"wagon_id": 0, "conversations": {}}, | |
| } | |
| } | |