possibly auth
This commit is contained in:
+145
-96
@@ -1,9 +1,9 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import Optional, List
|
||||
from datetime import datetime
|
||||
from typing import Optional, List, Dict, Any
|
||||
|
||||
|
||||
# ============================================================
|
||||
# USERS
|
||||
# AUTH / USERS
|
||||
# ============================================================
|
||||
class UserCreate(BaseModel):
|
||||
username: str
|
||||
@@ -33,34 +33,6 @@ class Token(BaseModel):
|
||||
token_type: str = "bearer"
|
||||
user: UserOut
|
||||
|
||||
# ============================================================
|
||||
# CLIENTS
|
||||
# ============================================================
|
||||
class ClientBase(BaseModel):
|
||||
full_name: str
|
||||
birth_date: Optional[str] = None
|
||||
goal: Optional[str] = ""
|
||||
notes: Optional[str] = ""
|
||||
|
||||
class ClientCreate(ClientBase):
|
||||
sync_id: str
|
||||
|
||||
class ClientUpdate(BaseModel):
|
||||
full_name: Optional[str] = None
|
||||
birth_date: Optional[str] = None
|
||||
goal: Optional[str] = None
|
||||
notes: Optional[str] = None
|
||||
is_active: Optional[int] = None
|
||||
|
||||
class Client(ClientBase):
|
||||
id: int
|
||||
sync_id: str
|
||||
is_active: int
|
||||
created_at: str
|
||||
updated_at: str
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
# ============================================================
|
||||
# WORKOUT TYPES
|
||||
@@ -69,10 +41,12 @@ class WorkoutTypeBase(BaseModel):
|
||||
name: str
|
||||
sort_order: Optional[int] = 0
|
||||
|
||||
class WorkoutTypeCreate(WorkoutTypeBase):
|
||||
sync_id: str
|
||||
|
||||
class WorkoutType(WorkoutTypeBase):
|
||||
class WorkoutTypeCreate(WorkoutTypeBase):
|
||||
sync_id: Optional[str] = None
|
||||
|
||||
|
||||
class WorkoutTypeOut(WorkoutTypeBase):
|
||||
id: int
|
||||
sync_id: str
|
||||
created_at: str
|
||||
@@ -80,6 +54,66 @@ class WorkoutType(WorkoutTypeBase):
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ============================================================
|
||||
# METRIC TYPES
|
||||
# ============================================================
|
||||
class MetricTypeBase(BaseModel):
|
||||
name: str
|
||||
unit: Optional[str] = "см"
|
||||
category: Optional[str] = "body"
|
||||
sort_order: Optional[int] = 0
|
||||
|
||||
|
||||
class MetricTypeCreate(MetricTypeBase):
|
||||
sync_id: Optional[str] = None
|
||||
|
||||
|
||||
class MetricTypeOut(MetricTypeBase):
|
||||
id: int
|
||||
sync_id: str
|
||||
created_at: str
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ============================================================
|
||||
# CLIENTS
|
||||
# ============================================================
|
||||
class ClientBase(BaseModel):
|
||||
full_name: str
|
||||
birth_date: Optional[str] = None
|
||||
goal: Optional[str] = ""
|
||||
notes: Optional[str] = ""
|
||||
color: Optional[str] = None
|
||||
is_active: Optional[int] = 1
|
||||
|
||||
|
||||
class ClientCreate(ClientBase):
|
||||
sync_id: Optional[str] = None
|
||||
|
||||
|
||||
class ClientUpdate(BaseModel):
|
||||
full_name: Optional[str] = None
|
||||
birth_date: Optional[str] = None
|
||||
goal: Optional[str] = None
|
||||
notes: Optional[str] = None
|
||||
color: Optional[str] = None
|
||||
is_active: Optional[int] = None
|
||||
|
||||
|
||||
class ClientOut(ClientBase):
|
||||
id: int
|
||||
sync_id: str
|
||||
owner_id: Optional[int] = None
|
||||
created_at: str
|
||||
updated_at: str
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ============================================================
|
||||
# EXERCISES
|
||||
# ============================================================
|
||||
@@ -87,22 +121,27 @@ class ExerciseBase(BaseModel):
|
||||
name: str
|
||||
workout_type_id: Optional[int] = None
|
||||
|
||||
|
||||
class ExerciseCreate(ExerciseBase):
|
||||
sync_id: str
|
||||
sync_id: Optional[str] = None
|
||||
|
||||
|
||||
class ExerciseUpdate(BaseModel):
|
||||
name: Optional[str] = None
|
||||
workout_type_id: Optional[int] = None
|
||||
|
||||
class Exercise(ExerciseBase):
|
||||
|
||||
class ExerciseOut(ExerciseBase):
|
||||
id: int
|
||||
sync_id: str
|
||||
owner_id: Optional[int] = None
|
||||
created_at: str
|
||||
updated_at: str
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ============================================================
|
||||
# DROPSET ITEMS
|
||||
# ============================================================
|
||||
@@ -111,15 +150,18 @@ class DropsetItemBase(BaseModel):
|
||||
reps: int = Field(gt=0)
|
||||
sort_order: int = 0
|
||||
|
||||
|
||||
class DropsetItemCreate(DropsetItemBase):
|
||||
pass
|
||||
|
||||
class DropsetItem(DropsetItemBase):
|
||||
|
||||
class DropsetItemOut(DropsetItemBase):
|
||||
id: int
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ============================================================
|
||||
# SETS
|
||||
# ============================================================
|
||||
@@ -132,40 +174,47 @@ class SetBase(BaseModel):
|
||||
sort_order: int = 0
|
||||
timestamp: str
|
||||
|
||||
class SetCreate(SetBase):
|
||||
sync_id: str
|
||||
dropset_items: Optional[List[DropsetItemCreate]] = []
|
||||
|
||||
class Set(SetBase):
|
||||
class SetCreate(SetBase):
|
||||
sync_id: Optional[str] = None
|
||||
dropset_items: List[DropsetItemCreate] = Field(default_factory=list)
|
||||
|
||||
|
||||
class SetOut(SetBase):
|
||||
id: int
|
||||
sync_id: str
|
||||
created_at: str
|
||||
dropset_items: List[DropsetItem] = []
|
||||
dropset_items: List[DropsetItemOut] = Field(default_factory=list)
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ============================================================
|
||||
# WORKOUT EXERCISES
|
||||
# ============================================================
|
||||
class WorkoutExerciseBase(BaseModel):
|
||||
exercise_id: Optional[int] = None
|
||||
exercise_name: str
|
||||
exercise_id: Optional[int] = None
|
||||
exercise_sync_id: Optional[str] = None
|
||||
sort_order: int = 0
|
||||
|
||||
class WorkoutExerciseCreate(WorkoutExerciseBase):
|
||||
sync_id: str
|
||||
sets: Optional[List[SetCreate]] = []
|
||||
|
||||
class WorkoutExercise(WorkoutExerciseBase):
|
||||
class WorkoutExerciseCreate(WorkoutExerciseBase):
|
||||
sync_id: Optional[str] = None
|
||||
sets: List[SetCreate] = Field(default_factory=list)
|
||||
|
||||
|
||||
class WorkoutExerciseOut(WorkoutExerciseBase):
|
||||
id: int
|
||||
sync_id: str
|
||||
created_at: str
|
||||
sets: List[Set] = []
|
||||
sets: List[SetOut] = Field(default_factory=list)
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ============================================================
|
||||
# CARDIO
|
||||
# ============================================================
|
||||
@@ -180,10 +229,12 @@ class CardioBase(BaseModel):
|
||||
notes: Optional[str] = ""
|
||||
sort_order: int = 0
|
||||
|
||||
class CardioCreate(CardioBase):
|
||||
sync_id: str
|
||||
|
||||
class Cardio(CardioBase):
|
||||
class CardioCreate(CardioBase):
|
||||
sync_id: Optional[str] = None
|
||||
|
||||
|
||||
class CardioOut(CardioBase):
|
||||
id: int
|
||||
sync_id: str
|
||||
created_at: str
|
||||
@@ -191,20 +242,24 @@ class Cardio(CardioBase):
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ============================================================
|
||||
# WORKOUTS
|
||||
# ============================================================
|
||||
class WorkoutBase(BaseModel):
|
||||
client_id: Optional[int] = None
|
||||
workout_type_id: Optional[int] = None
|
||||
start_time: str
|
||||
end_time: Optional[str] = None
|
||||
notes: Optional[str] = ""
|
||||
workout_type_id: Optional[int] = None
|
||||
|
||||
|
||||
class WorkoutCreate(WorkoutBase):
|
||||
sync_id: str
|
||||
workout_exercises: Optional[List[WorkoutExerciseCreate]] = []
|
||||
cardio_sessions: Optional[List[CardioCreate]] = []
|
||||
sync_id: Optional[str] = None
|
||||
client_id: Optional[int] = None
|
||||
client_sync_id: Optional[str] = None
|
||||
workout_exercises: List[WorkoutExerciseCreate] = Field(default_factory=list)
|
||||
cardio_sessions: List[CardioCreate] = Field(default_factory=list)
|
||||
|
||||
|
||||
class WorkoutUpdate(BaseModel):
|
||||
workout_type_id: Optional[int] = None
|
||||
@@ -212,87 +267,81 @@ class WorkoutUpdate(BaseModel):
|
||||
notes: Optional[str] = None
|
||||
synced: Optional[int] = None
|
||||
|
||||
class Workout(WorkoutBase):
|
||||
|
||||
class WorkoutOut(WorkoutBase):
|
||||
id: int
|
||||
sync_id: str
|
||||
owner_id: Optional[int] = None
|
||||
client_id: Optional[int] = None
|
||||
synced: int
|
||||
created_at: str
|
||||
updated_at: str
|
||||
workout_exercises: List[WorkoutExercise] = []
|
||||
cardio_sessions: List[Cardio] = []
|
||||
workout_exercises: List[WorkoutExerciseOut] = Field(default_factory=list)
|
||||
cardio_sessions: List[CardioOut] = Field(default_factory=list)
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
# ============================================================
|
||||
# METRIC TYPES
|
||||
# ============================================================
|
||||
class MetricTypeBase(BaseModel):
|
||||
name: str
|
||||
unit: Optional[str] = "см"
|
||||
category: Optional[str] = "body"
|
||||
sort_order: Optional[int] = 0
|
||||
|
||||
class MetricTypeCreate(MetricTypeBase):
|
||||
sync_id: str
|
||||
|
||||
class MetricType(MetricTypeBase):
|
||||
id: int
|
||||
sync_id: str
|
||||
created_at: str
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
# ============================================================
|
||||
# BODY METRIC VALUES
|
||||
# ============================================================
|
||||
class BodyMetricValueBase(BaseModel):
|
||||
metric_type_id: int
|
||||
value: float
|
||||
|
||||
class BodyMetricValueCreate(BodyMetricValueBase):
|
||||
pass
|
||||
|
||||
class BodyMetricValue(BodyMetricValueBase):
|
||||
class BodyMetricValueCreate(BodyMetricValueBase):
|
||||
metric_type_id: Optional[int] = None
|
||||
metric_type_sync_id: Optional[str] = None
|
||||
|
||||
|
||||
class BodyMetricValueOut(BodyMetricValueBase):
|
||||
id: int
|
||||
metric_type_id: int
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ============================================================
|
||||
# BODY METRICS
|
||||
# ============================================================
|
||||
class BodyMetricBase(BaseModel):
|
||||
client_id: Optional[int] = None
|
||||
metric_date: str
|
||||
notes: Optional[str] = ""
|
||||
|
||||
class BodyMetricCreate(BodyMetricBase):
|
||||
sync_id: str
|
||||
values: Optional[List[BodyMetricValueCreate]] = []
|
||||
|
||||
class BodyMetric(BodyMetricBase):
|
||||
class BodyMetricCreate(BodyMetricBase):
|
||||
sync_id: Optional[str] = None
|
||||
client_id: Optional[int] = None
|
||||
client_sync_id: Optional[str] = None
|
||||
values: List[BodyMetricValueCreate] = Field(default_factory=list)
|
||||
|
||||
|
||||
class BodyMetricOut(BodyMetricBase):
|
||||
id: int
|
||||
sync_id: str
|
||||
owner_id: Optional[int] = None
|
||||
client_id: Optional[int] = None
|
||||
created_at: str
|
||||
values: List[BodyMetricValue] = []
|
||||
values: List[BodyMetricValueOut] = Field(default_factory=list)
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
# ============================================================
|
||||
# SYNC
|
||||
# ============================================================
|
||||
class SyncPayload(BaseModel):
|
||||
clients: Optional[List[ClientCreate]] = []
|
||||
workout_types: Optional[List[WorkoutTypeCreate]] = []
|
||||
exercises: Optional[List[ExerciseCreate]] = []
|
||||
workouts: Optional[List[WorkoutCreate]] = []
|
||||
metric_types: Optional[List[MetricTypeCreate]] = []
|
||||
body_metrics: Optional[List[BodyMetricCreate]] = []
|
||||
clients: List[ClientCreate] = Field(default_factory=list)
|
||||
exercises: List[ExerciseCreate] = Field(default_factory=list)
|
||||
workouts: List[WorkoutCreate] = Field(default_factory=list)
|
||||
body_metrics: List[BodyMetricCreate] = Field(default_factory=list)
|
||||
|
||||
|
||||
class SyncResponse(BaseModel):
|
||||
status: str
|
||||
created: dict
|
||||
updated: dict
|
||||
created: Dict[str, int]
|
||||
updated: Dict[str, int]
|
||||
warnings: List[str] = Field(default_factory=list)
|
||||
|
||||
Reference in New Issue
Block a user