This commit is contained in:
2025-12-14 02:38:35 +07:00
commit 5343a8f2c3
84 changed files with 7406 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
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