From 93275d19b565d75cf5d201f16e04b3668a710bbf Mon Sep 17 00:00:00 2001 From: t0xa Date: Fri, 23 Oct 2026 21:22:19 +0300 Subject: [PATCH] Add iOS method for sync --- backend/app/api/v1/trainings.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/backend/app/api/v1/trainings.py b/backend/app/api/v1/trainings.py index bdda0b0..f1b859f 100644 --- a/backend/app/api/v1/trainings.py +++ b/backend/app/api/v1/trainings.py @@ -1,6 +1,6 @@ from typing import List -from fastapi import APIRouter, Depends, HTTPException +from fastapi import APIRouter, Depends, HTTPException, status from app.api.deps import ( get_current_user, @@ -70,6 +70,26 @@ async def get_training( return training +@router.post("/", response_model=TrainingDTO, status_code=status.HTTP_201_CREATED) +async def create_training( + payload: TrainingUpdate, + user: UserDTO = Depends(get_current_user), + repository: TrainingRepository = Depends(get_training_repository), + user_repository: UserRepository = Depends(get_user_repository), +): + """Create a training. Only a superuser may create it for another trainee.""" + if payload.trainee_id != user.id: + if not user.is_superuser: + raise HTTPException( + status_code=403, detail="Only a superuser can create a training for another user" + ) + await _check_participant(user_repository, payload.trainee_id, UserRole.trainee) + if payload.trainer_id is not None: + await _check_participant(user_repository, payload.trainer_id, UserRole.trainer) + training_id = await repository.save(TrainingDTO.model_validate(payload.model_dump())) + return await repository.get(training_id) + + @router.put("/{training_id}/", response_model=TrainingDTO) async def update_training( training_id: int,