mirror of
https://github.com/sstent/AICyclingCoach.git
synced 2026-04-04 20:13:08 +00:00
sync
This commit is contained in:
25
backend/app/schemas/analysis.py
Normal file
25
backend/app/schemas/analysis.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional, Dict, Any
|
||||
|
||||
|
||||
class AnalysisBase(BaseModel):
|
||||
workout_id: int
|
||||
analysis_type: str = 'workout_review'
|
||||
jsonb_feedback: Optional[Dict[str, Any]] = None
|
||||
suggestions: Optional[Dict[str, Any]] = None
|
||||
approved: bool = False
|
||||
|
||||
|
||||
class AnalysisCreate(AnalysisBase):
|
||||
pass
|
||||
|
||||
|
||||
class Analysis(AnalysisBase):
|
||||
id: int
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
|
||||
class AnalysisUpdate(BaseModel):
|
||||
approved: bool
|
||||
25
backend/app/schemas/gpx.py
Normal file
25
backend/app/schemas/gpx.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional, List
|
||||
|
||||
class GPXData(BaseModel):
|
||||
total_distance: float
|
||||
elevation_gain: float
|
||||
points: List[dict]
|
||||
|
||||
class RouteCreate(BaseModel):
|
||||
name: str
|
||||
description: Optional[str] = None
|
||||
total_distance: float
|
||||
elevation_gain: float
|
||||
gpx_file_path: str
|
||||
|
||||
class Route(BaseModel):
|
||||
id: str
|
||||
name: str
|
||||
description: Optional[str] = None
|
||||
total_distance: float
|
||||
elevation_gain: float
|
||||
gpx_file_path: str
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
19
backend/app/schemas/plan.py
Normal file
19
backend/app/schemas/plan.py
Normal file
@@ -0,0 +1,19 @@
|
||||
from pydantic import BaseModel
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
from uuid import UUID
|
||||
|
||||
class PlanBase(BaseModel):
|
||||
user_id: UUID
|
||||
start_date: datetime
|
||||
end_date: datetime
|
||||
goal: str
|
||||
|
||||
class PlanCreate(PlanBase):
|
||||
rule_ids: List[UUID]
|
||||
|
||||
class Plan(PlanBase):
|
||||
id: UUID
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
30
backend/app/schemas/prompt.py
Normal file
30
backend/app/schemas/prompt.py
Normal file
@@ -0,0 +1,30 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class PromptBase(BaseModel):
|
||||
action_type: str
|
||||
model: Optional[str] = None
|
||||
prompt_text: str
|
||||
version: int = 1
|
||||
active: bool = True
|
||||
|
||||
|
||||
class PromptCreate(BaseModel):
|
||||
action_type: str
|
||||
prompt_text: str
|
||||
model: Optional[str] = None
|
||||
|
||||
|
||||
class PromptUpdate(BaseModel):
|
||||
prompt_text: Optional[str] = None
|
||||
active: Optional[bool] = None
|
||||
|
||||
|
||||
class Prompt(PromptBase):
|
||||
id: int
|
||||
created_at: datetime
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
17
backend/app/schemas/rule.py
Normal file
17
backend/app/schemas/rule.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional
|
||||
|
||||
class RuleBase(BaseModel):
|
||||
name: str
|
||||
description: Optional[str] = None
|
||||
condition: str
|
||||
priority: int = 0
|
||||
|
||||
class RuleCreate(RuleBase):
|
||||
pass
|
||||
|
||||
class Rule(RuleBase):
|
||||
id: str
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
40
backend/app/schemas/workout.py
Normal file
40
backend/app/schemas/workout.py
Normal file
@@ -0,0 +1,40 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional, Dict, Any
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class WorkoutBase(BaseModel):
|
||||
garmin_activity_id: str
|
||||
activity_type: Optional[str] = None
|
||||
start_time: datetime
|
||||
duration_seconds: Optional[int] = None
|
||||
distance_m: Optional[float] = None
|
||||
avg_hr: Optional[int] = None
|
||||
max_hr: Optional[int] = None
|
||||
avg_power: Optional[float] = None
|
||||
max_power: Optional[float] = None
|
||||
avg_cadence: Optional[float] = None
|
||||
elevation_gain_m: Optional[float] = None
|
||||
metrics: Optional[Dict[str, Any]] = None
|
||||
|
||||
|
||||
class WorkoutCreate(WorkoutBase):
|
||||
plan_id: Optional[int] = None
|
||||
|
||||
|
||||
class Workout(WorkoutBase):
|
||||
id: int
|
||||
plan_id: Optional[int] = None
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
|
||||
|
||||
class WorkoutSyncStatus(BaseModel):
|
||||
status: str
|
||||
last_sync_time: Optional[datetime] = None
|
||||
activities_synced: int = 0
|
||||
error_message: Optional[str] = None
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
Reference in New Issue
Block a user