59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
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"}
|