from datetime import datetime from pydantic import BaseModel, Field from app.schemas.user import UserPublic class MarathonBase(BaseModel): title: str = Field(..., min_length=1, max_length=100) description: str | None = None class MarathonCreate(MarathonBase): start_date: datetime duration_days: int = Field(default=30, ge=1, le=365) class MarathonUpdate(BaseModel): title: str | None = Field(None, min_length=1, max_length=100) description: str | None = None start_date: datetime | None = None class ParticipantInfo(BaseModel): id: int total_points: int current_streak: int drop_count: int joined_at: datetime class Config: from_attributes = True class ParticipantWithUser(ParticipantInfo): user: UserPublic class MarathonResponse(MarathonBase): id: int organizer: UserPublic status: str invite_code: str start_date: datetime | None end_date: datetime | None participants_count: int games_count: int created_at: datetime my_participation: ParticipantInfo | None = None class Config: from_attributes = True class MarathonListItem(BaseModel): id: int title: str status: str participants_count: int start_date: datetime | None end_date: datetime | None class Config: from_attributes = True class JoinMarathon(BaseModel): invite_code: str class LeaderboardEntry(BaseModel): rank: int user: UserPublic total_points: int current_streak: int completed_count: int dropped_count: int