Spaces:
Sleeping
Sleeping
| from pydantic import BaseModel, EmailStr, Field | |
| from typing import Optional | |
| from datetime import datetime | |
| # User schemas | |
| class UserBase(BaseModel): | |
| username: str = Field(..., min_length=3, max_length=50) | |
| email: EmailStr | |
| class UserCreate(UserBase): | |
| password: str = Field(..., min_length=6) | |
| class UserResponse(UserBase): | |
| id: int | |
| is_active: bool | |
| is_admin: bool | |
| created_at: datetime | |
| last_login: Optional[datetime] = None | |
| class Config: | |
| from_attributes = True | |
| # Auth schemas | |
| class Token(BaseModel): | |
| access_token: str | |
| token_type: str | |
| class TokenData(BaseModel): | |
| username: Optional[str] = None | |
| class LoginRequest(BaseModel): | |
| username: str | |
| password: str | |
| # UserStats schemas | |
| class UserStatsBase(BaseModel): | |
| energy: float = 100.0 | |
| max_energy: float = 100.0 | |
| hunger: float = 100.0 | |
| max_hunger: float = 100.0 | |
| level: int = 1 | |
| experience: int = 0 | |
| coins: int = 0 | |
| class UserStatsResponse(UserStatsBase): | |
| id: int | |
| user_id: int | |
| total_playtime: int | |
| rooms_visited: int | |
| items_collected: int | |
| enemies_defeated: int | |
| deaths: int | |
| updated_at: datetime | |
| class Config: | |
| from_attributes = True | |
| class UserStatsUpdate(BaseModel): | |
| energy: Optional[float] = None | |
| hunger: Optional[float] = None | |
| experience: Optional[int] = None | |
| coins: Optional[int] = None | |
| rooms_visited: Optional[int] = None | |
| items_collected: Optional[int] = None | |
| enemies_defeated: Optional[int] = None | |
| deaths: Optional[int] = None | |
| # GameSession schemas | |
| class GameSessionCreate(BaseModel): | |
| pass | |
| class GameSessionResponse(BaseModel): | |
| id: int | |
| user_id: int | |
| started_at: datetime | |
| ended_at: Optional[datetime] = None | |
| duration: int | |
| energy_consumed: float | |
| hunger_consumed: float | |
| rooms_visited_session: int | |
| items_collected_session: int | |
| enemies_defeated_session: int | |
| deaths_session: int | |
| class Config: | |
| from_attributes = True | |
| # Admin schemas | |
| class AdminStats(BaseModel): | |
| total_users: int | |
| active_users_today: int | |
| new_users_today: int | |
| total_sessions: int | |
| avg_session_duration: float | |
| total_playtime: int | |
| total_rooms_visited: int | |
| total_items_collected: int | |
| total_enemies_defeated: int | |
| class UserListItem(BaseModel): | |
| id: int | |
| username: str | |
| email: str | |
| is_active: bool | |
| is_admin: bool | |
| created_at: datetime | |
| last_login: Optional[datetime] = None | |
| class Config: | |
| from_attributes = True | |
| class UserDetail(UserListItem): | |
| stats: Optional[UserStatsResponse] = None | |