53 lines
1.3 KiB
Python
53 lines
1.3 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
|
|
|
|
|
|
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
|