Add initial project

This commit is contained in:
2026-07-30 23:25:20 -04:00
commit cff6aa8289
164 changed files with 26672 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
"""Pydantic schemas module."""
from backend.schemas.user import UserCreate, UserResponse
from backend.schemas.challenge import ChallengeBase, ChallengeCreate, ChallengeResponse
from backend.schemas.tracking import TrackingBase, TrackingCreate, TrackingResponse
from backend.schemas.daily_health_metrics import DailyHealthMetricsBase, DailyHealthMetricsResponse
from backend.schemas.workout_session import WorkoutSessionBase, WorkoutSessionCreate, WorkoutSessionResponse
from backend.schemas.token import Token
__all__ = [
"UserCreate", "UserResponse",
"ChallengeBase", "ChallengeCreate", "ChallengeResponse",
"TrackingBase", "TrackingCreate", "TrackingResponse",
"DailyHealthMetricsBase", "DailyHealthMetricsResponse",
"WorkoutSessionBase", "WorkoutSessionCreate", "WorkoutSessionResponse",
"Token"
]
+38
View File
@@ -0,0 +1,38 @@
"""Challenge Pydantic schemas."""
from pydantic import BaseModel
from typing import Optional, List
from datetime import date
from backend.schemas.tracking import TrackingResponse
from backend.models.tracking import Tracking
class ChallengeBase(BaseModel):
"""Base schema for challenge."""
name: str
period_type: str
daily_target: int
start_date: date
end_date: Optional[date] = None
unit_type: Optional[str] = "reps"
rest_days: Optional[str] = None
icon: Optional[str] = "fa-dumbbell"
image_url: Optional[str] = None
description: Optional[str] = None
frequency_count: Optional[int] = None
selected_days: Optional[str] = None
class ChallengeCreate(ChallengeBase):
"""Schema for creating a challenge."""
pass
class ChallengeResponse(ChallengeBase):
"""Schema for challenge response."""
id: int
created_at: date
display_order: int = 0
trackings: List[TrackingResponse] = []
class Config:
from_attributes = True
+34
View File
@@ -0,0 +1,34 @@
"""DailyHealthMetrics Pydantic schemas."""
from pydantic import BaseModel
from typing import Optional
from datetime import date
class DailyHealthMetricsBase(BaseModel):
"""Base schema for daily health metrics."""
date: date
step_count: Optional[int] = 0
distance_meters: Optional[float] = 0.0
calories_burned: Optional[float] = 0.0
sleep_duration_minutes: Optional[int] = 0
deep_sleep_minutes: Optional[int] = 0
light_sleep_minutes: Optional[int] = 0
rem_sleep_minutes: Optional[int] = 0
awake_duration_minutes: Optional[int] = 0
avg_heart_rate: Optional[int] = None
min_heart_rate: Optional[int] = None
max_heart_rate: Optional[int] = None
avg_spo2: Optional[float] = None
pai_score: Optional[float] = 0.0
weight: Optional[float] = None
resting_heart_rate: Optional[int] = None
hrv: Optional[float] = None
class DailyHealthMetricsResponse(DailyHealthMetricsBase):
"""Schema for daily health metrics response."""
id: int
user_id: int
class Config:
from_attributes = True
+9
View File
@@ -0,0 +1,9 @@
"""Token Pydantic schema."""
from pydantic import BaseModel
class Token(BaseModel):
"""Schema for JWT token response."""
access_token: str
refresh_token: str
token_type: str
+26
View File
@@ -0,0 +1,26 @@
"""Tracking Pydantic schemas."""
from pydantic import BaseModel
from typing import Optional
from datetime import date
class TrackingBase(BaseModel):
"""Base schema for tracking."""
date: date
reps: int
completed: bool = False
notes: Optional[str] = None
class TrackingCreate(TrackingBase):
"""Schema for creating tracking."""
challenge_id: int
class TrackingResponse(TrackingBase):
"""Schema for tracking response."""
id: int
challenge_id: int
class Config:
from_attributes = True
+17
View File
@@ -0,0 +1,17 @@
"""User Pydantic schemas."""
from pydantic import BaseModel
class UserCreate(BaseModel):
"""Schema for user registration."""
username: str
password: str
class UserResponse(BaseModel):
"""Schema for user response."""
id: int
username: str
class Config:
from_attributes = True
+36
View File
@@ -0,0 +1,36 @@
"""WorkoutSession Pydantic schemas."""
from pydantic import BaseModel
from typing import Optional
from datetime import datetime
class WorkoutSessionBase(BaseModel):
"""Base schema for workout session."""
start_time: datetime
end_time: Optional[datetime] = None
activity_type: str
activity_type_id: Optional[int] = None
duration_seconds: int = 0
distance_meters: float = 0.0
calories: float = 0.0
avg_pace: Optional[float] = None
max_pace: Optional[float] = None
min_pace: Optional[float] = None
avg_hr: Optional[int] = None
max_hr: Optional[int] = None
min_hr: Optional[int] = None
notes: Optional[str] = None
class WorkoutSessionCreate(WorkoutSessionBase):
"""Schema for creating a workout session."""
pass
class WorkoutSessionResponse(WorkoutSessionBase):
"""Schema for workout session response."""
id: int
user_id: int
class Config:
from_attributes = True