48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
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: 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
|
|
date: date
|
|
trainer: str | None = None
|
|
splitted_weight: bool = False
|
|
approaches: list[ApproachDTO] = Field(default_factory=list)
|