Files
sport-platform/backend/app/schemas/activity.py
2026-03-16 14:46:20 +03:00

93 lines
2.1 KiB
Python

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
calories: int | None = None
class IntervalResponse(BaseModel):
model_config = {"from_attributes": True}
id: UUID
start_ts: datetime
end_ts: datetime
interval_type: str
avg_power: float | None = None
avg_hr: int | None = None
duration: int | 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
intervals: list[IntervalResponse] = []
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
class ZoneItem(BaseModel):
zone: int
name: str
seconds: int
percentage: float
class PowerZoneItem(ZoneItem):
min_watts: int
max_watts: int | None = None
class HrZoneItem(ZoneItem):
min_bpm: int
max_bpm: int | None = None
class ZonesResponse(BaseModel):
power_zones: list[PowerZoneItem] = []
hr_zones: list[HrZoneItem] = []
class PowerCurveResponse(BaseModel):
curve: dict[int, int] # {duration_seconds: max_power}