"""Router saints — consultation des saints du jour (indépendant de l'année).""" import json from typing import Any, List, Optional from fastapi import APIRouter, Depends, Query from sqlmodel import Session, select from app.database import get_session from app.models.saint import SaintDuJour router = APIRouter(tags=["saints"]) @router.get("/saints", response_model=List[SaintDuJour]) def list_saints( mois: Optional[int] = Query(None, ge=1, le=12), jour: Optional[int] = Query(None, ge=1, le=31), session: Session = Depends(get_session), ): """Liste les saints. Filtrer par mois et/ou jour.""" q = select(SaintDuJour) if mois is not None: q = q.where(SaintDuJour.mois == mois) if jour is not None: q = q.where(SaintDuJour.jour == jour) q = q.order_by(SaintDuJour.mois, SaintDuJour.jour) return session.exec(q).all() @router.get("/saints/jour", response_model=dict) def get_saints_du_jour( mois: int = Query(..., ge=1, le=12), jour: int = Query(..., ge=1, le=31), session: Session = Depends(get_session), ) -> dict[str, Any]: """Retourne les saints et leur liste parsée pour un jour précis.""" row = session.exec( select(SaintDuJour).where( SaintDuJour.mois == mois, SaintDuJour.jour == jour, ) ).first() if not row: return {"mois": mois, "jour": jour, "saints": []} try: saints_list = json.loads(row.saints_json) except (json.JSONDecodeError, TypeError): saints_list = [] return { "mois": row.mois, "jour": row.jour, "saints": saints_list, "source_url": row.source_url, }