from pydantic import BaseModel, ConfigDict, Field from datetime import date class DTOBase(BaseModel): # Allows TrainingDTO.model_validate() model_config = ConfigDict(from_attributes=True) class ApproachDTO(DTOBase): id: int | None = None exercise_id: int | None = None weight: float reps: int class ExerciseDTO(DTOBase): id: int | None = None training_id: int | None = None name: str splitted_weight: bool = False approaches: list[ApproachDTO] = Field(default_factory=list) class TrainingDTO(DTOBase): id: int | None = None date: date trainee_id: int | None = None # None only for trainings that are not saved yet trainer_id: int | None = None # None: a solo training trainer: str | None = None # the trainer's name, filled in when read from the DB 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.""" training_id: int | None = None trainee_id: int | None = None date: date trainer: str | None = None splitted_weight: bool = False approaches: list[ApproachDTO] = Field(default_factory=list)