41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
from fastapi import APIRouter, HTTPException, status
|
|
|
|
from app.api.deps import LecteurDep, RecommendationServiceDep
|
|
from app.api.openapi import REPONSE_VALIDATION, Reponses
|
|
from app.schemas.errors import ErrorResponse
|
|
from app.schemas.recommendation import RecommendationResponse
|
|
from app.services.recommendation import RecommendationNotFoundError
|
|
|
|
router = APIRouter()
|
|
|
|
REPONSES_INTROUVABLE: Reponses = {
|
|
**REPONSE_VALIDATION,
|
|
404: {"model": ErrorResponse, "description": "Aucune recommandation ne porte cet identifiant."},
|
|
}
|
|
|
|
|
|
@router.get("", response_model=list[RecommendationResponse], summary="Liste les recommandations")
|
|
async def list_recommendations(
|
|
_: LecteurDep, service: RecommendationServiceDep
|
|
) -> list[RecommendationResponse]:
|
|
recommendations = await service.list_all()
|
|
return [RecommendationResponse.model_validate(r) for r in recommendations]
|
|
|
|
|
|
@router.get(
|
|
"/{recommendation_id}",
|
|
response_model=RecommendationResponse,
|
|
summary="Décrit une recommandation",
|
|
responses=REPONSES_INTROUVABLE,
|
|
)
|
|
async def get_recommendation(
|
|
recommendation_id: int, _: LecteurDep, service: RecommendationServiceDep
|
|
) -> RecommendationResponse:
|
|
try:
|
|
recommendation = await service.get_by_id(recommendation_id)
|
|
except RecommendationNotFoundError as erreur:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND, detail="Recommandation introuvable"
|
|
) from erreur
|
|
return RecommendationResponse.model_validate(recommendation)
|