This commit is contained in:
xds
2026-03-16 12:12:56 +03:00
commit 9d886076d6
63 changed files with 4482 additions and 0 deletions

View File

View File

@@ -0,0 +1,52 @@
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel
class ActivityMetricsResponse(BaseModel):
model_config = {"from_attributes": True}
tss: float | None = None
normalized_power: float | None = None
intensity_factor: float | None = None
variability_index: float | None = None
avg_power: float | None = None
max_power: int | None = None
avg_hr: int | None = None
max_hr: int | None = None
avg_cadence: int | None = None
avg_speed: float | None = None
class ActivityResponse(BaseModel):
model_config = {"from_attributes": True}
id: UUID
rider_id: UUID
name: str | None = None
activity_type: str
date: datetime
duration: int
distance: float | None = None
elevation_gain: float | None = None
metrics: ActivityMetricsResponse | None = None
class ActivityListResponse(BaseModel):
items: list[ActivityResponse]
total: int
class DataPointResponse(BaseModel):
model_config = {"from_attributes": True}
timestamp: datetime
power: int | None = None
heart_rate: int | None = None
cadence: int | None = None
speed: float | None = None
latitude: float | None = None
longitude: float | None = None
altitude: float | None = None
temperature: int | None = None

View File

@@ -0,0 +1,23 @@
from pydantic import BaseModel
from backend.app.schemas.rider import RiderResponse
class TelegramLoginRequest(BaseModel):
id: int
first_name: str
last_name: str | None = None
username: str | None = None
photo_url: str | None = None
auth_date: int
hash: str
class TelegramWebAppRequest(BaseModel):
init_data: str
class AuthResponse(BaseModel):
access_token: str
token_type: str = "bearer"
rider: RiderResponse

View File

@@ -0,0 +1,38 @@
from uuid import UUID
from pydantic import BaseModel
class RiderCreate(BaseModel):
name: str
ftp: float | None = None
lthr: int | None = None
weight: float | None = None
goals: str | None = None
experience_level: str | None = None
class RiderUpdate(BaseModel):
name: str | None = None
ftp: float | None = None
lthr: int | None = None
weight: float | None = None
zones_config: dict | None = None
goals: str | None = None
experience_level: str | None = None
class RiderResponse(BaseModel):
model_config = {"from_attributes": True}
id: UUID
telegram_id: int | None = None
telegram_username: str | None = None
avatar_url: str | None = None
name: str
ftp: float | None = None
lthr: int | None = None
weight: float | None = None
zones_config: dict | None = None
goals: str | None = None
experience_level: str | None = None