Files
jardin/backend/app/routers/lunar.py
2026-02-22 15:05:40 +01:00

37 lines
1.1 KiB
Python

import calendar
from datetime import date
from typing import Any
from fastapi import APIRouter, HTTPException, Query
router = APIRouter(tags=["lunaire"])
# Cache en mémoire : {mois_str: list[dict]}
_CACHE: dict[str, list[dict]] = {}
@router.get("/lunar")
def get_lunar(
month: str = Query(..., description="Format YYYY-MM"),
) -> list[dict[str, Any]]:
if month in _CACHE:
return _CACHE[month]
try:
year, mon = int(month[:4]), int(month[5:7])
except (ValueError, IndexError):
raise HTTPException(400, "Format attendu : YYYY-MM")
last_day = calendar.monthrange(year, mon)[1]
start = date(year, mon, 1)
end = date(year, mon, last_day)
try:
from app.services.lunar import build_calendar
from dataclasses import asdict
result = [asdict(d) for d in build_calendar(start, end)]
except ImportError:
raise HTTPException(503, "Service lunaire non disponible (skyfield non installé)")
except Exception as e:
raise HTTPException(500, f"Erreur calcul lunaire : {e}")
_CACHE[month] = result
return result