f1tness_parser/backend/app/core/dto/training.py

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)