- Nouveau modèle SaintDuJour (mois+jour+saints_json, indépendant de l'année) - Router /api/saints et /api/saints/jour (mois+jour → liste de prénoms) - Script standalone import_webapp_db.py : saints_du_jour.json → saint_du_jour, dictons_du_jour.json → dicton ; modes replace/append, --dry-run, --region - Données JSON 366 jours : saints_du_jour.json + dictons_du_jour.json - Scripts scraping/export calendrier_lunaire/saints_dictons/ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
"""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,
|
|
}
|