from typing import List from fastapi import APIRouter, Depends, HTTPException from app.api.deps import get_training_repository from app.core.database.repository import TrainingRepository from app.core.dto.training import TrainingDTO from app.schemas.trainings import TrainingUpdate from app.core.parsers.obsidian import parse_training_data router = APIRouter() @router.get("/obsidian/") async def obsidian_trainings_list(): return {"data": parse_training_data()} @router.get("/", response_model=List[TrainingDTO]) async def get_trainings_list( repository: TrainingRepository = Depends(get_training_repository), ): return await repository.list() @router.get("/{training_id}/", response_model=TrainingDTO) async def get_training( training_id: int, repository: TrainingRepository = Depends(get_training_repository), ): training = await repository.get(training_id) if training is None: raise HTTPException(status_code=404, detail="Training not found") return training @router.put("/{training_id}/", response_model=TrainingDTO) async def update_training( training_id: int, payload: TrainingUpdate, repository: TrainingRepository = Depends(get_training_repository), ): """Replace the training: its date, trainer, exercises and approaches.""" training = TrainingDTO.model_validate(payload.model_dump()) if not await repository.replace(training_id, training): raise HTTPException(status_code=404, detail="Training not found") return await repository.get(training_id) @router.delete("/{training_id}/") async def delete_training( training_id: int, repository: TrainingRepository = Depends(get_training_repository), ): deleted = await repository.delete([training_id]) if not deleted: raise HTTPException(status_code=404, detail="Training not found") return {"status": "ok"}