File size: 1,185 Bytes
6cc9547 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | from pydantic import BaseModel
from typing import Optional
from datetime import datetime
class WatchReading(BaseModel):
timestamp: datetime
heart_rate: Optional[float] = None
steps: Optional[int] = None
calories_burned: Optional[float] = None
active_calories: Optional[float] = None
distance_meters: Optional[float] = None
sleep_hours: Optional[float] = None
spo2: Optional[float] = None # blood oxygen %
hrv: Optional[float] = None # heart rate variability
class WorkoutSession(BaseModel):
timestamp: datetime
workout_type: str # running, cycling, weightlifting, etc.
duration_minutes: float
avg_heart_rate: Optional[float] = None
max_heart_rate: Optional[float] = None
ending_heart_rate: Optional[float] = None # BPM at end/cool-down
calories_burned: Optional[float] = None
distance_meters: Optional[float] = None
notes: Optional[str] = None
class WatchSyncPayload(BaseModel):
readings: list[WatchReading] = []
workouts: list[WorkoutSession] = []
device: Optional[str] = None # "apple_watch", "garmin", "fitbit", etc.
app_version: Optional[str] = None
|