46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
from typing import List, Optional
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
from datetime import date
|
|
|
|
|
|
class DTOBase(BaseModel):
|
|
# Allows TrainingDTO.model_validate(<ORM model>)
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
|
|
class ApproachDTO(DTOBase):
|
|
id: Optional[int] = None
|
|
exercise_id: Optional[int] = None
|
|
weight: float
|
|
reps: int
|
|
|
|
|
|
class ExerciseDTO(DTOBase):
|
|
id: Optional[int] = None
|
|
training_id: Optional[int] = None
|
|
name: str
|
|
splitted_weight: bool = False
|
|
approaches: List[ApproachDTO] = Field(default_factory=list)
|
|
|
|
|
|
class TrainingDTO(DTOBase):
|
|
id: Optional[int] = None
|
|
date: date
|
|
trainer: Optional[str] = None
|
|
exercises: List[ExerciseDTO] = Field(default_factory=list)
|
|
|
|
|
|
class ExerciseNameDTO(DTOBase):
|
|
"""Distinct exercise name and how many times it was done."""
|
|
|
|
name: str
|
|
count: int
|
|
|
|
|
|
class ExerciseSessionDTO(DTOBase):
|
|
"""One occurrence of an exercise in the history of that exercise."""
|
|
|
|
date: date
|
|
trainer: Optional[str] = None
|
|
splitted_weight: bool = False
|
|
approaches: List[ApproachDTO] = Field(default_factory=list)
|