Add initial project
This commit is contained in:
@@ -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"
|
||||
]
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user