103 lines
1.9 KiB
Python
103 lines
1.9 KiB
Python
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
|