from dataclasses import dataclass from typing import Optional @dataclass class User: """User model for API requests and responses""" email: str password: str display_name: str id: Optional[str] = None @dataclass class RegisterRequest: """Request payload for /auth/register endpoint""" email: str password: str display_name: str @dataclass class LoginRequest: """Request payload for /auth/login endpoint""" email: str password: str @dataclass class AuthResponse: """Response from authentication endpoints""" message: str email: Optional[str] = None id: Optional[str] = None @dataclass class Hat: """A wearable hat""" name: str description: str user_id: int @dataclass class ActivityFile: """Activity file model for API responses""" id: int timestamp: str file_repo_hash: Optional[str] created_at: str updated_at: str user_id: int @dataclass class Workout: """Workout model for API responses""" id: int distance_miles: Optional[float] time_seconds: Optional[float] speed_mph: Optional[float] pace_min_per_mile: Optional[float] start_time: Optional[str] end_time: Optional[str] activity_file_id: Optional[int] created_at: str updated_at: str user_id: int @dataclass class CreateWorkoutRequest: """Request payload for creating a new workout""" distance_miles: Optional[float] = None time_seconds: Optional[float] = None speed_mph: Optional[float] = None pace_min_per_mile: Optional[float] = None start_time: Optional[str] = None end_time: Optional[str] = None activity_file_id: Optional[int] = None @dataclass class UpdateWorkoutRequest: """Request payload for updating an existing workout""" distance_miles: Optional[float] = None time_seconds: Optional[float] = None speed_mph: Optional[float] = None pace_min_per_mile: Optional[float] = None start_time: Optional[str] = None end_time: Optional[str] = None activity_file_id: Optional[int] = None