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