"""Routes C2 — Calendrier du groupe.""" from fastapi import APIRouter, Depends from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select from app.core.database import get_db from app.core.security import get_current_membre from app.models.groupe import Groupe from app.models.affectation import Affectation from app.models.poste import Poste from app.models.membre import Membre from app.schemas.phase2 import CalendrierEntry router = APIRouter(prefix="/calendrier", tags=["C2 — Calendrier"]) @router.get("/", response_model=list[CalendrierEntry]) async def calendrier_groupe_courant( membre=Depends(get_current_membre), db: AsyncSession = Depends(get_db), ): """C2 — Calendrier des serviteurs du groupe courant.""" groupe = await db.get(Groupe, membre.groupe_id) if not groupe: return [] result = await db.execute( select(Affectation).where( Affectation.groupe_id == membre.groupe_id, Affectation.statut == "actif", ) ) affectations = result.scalars().all() entries = [] for a in affectations: poste = await db.get(Poste, a.poste_id) mbr = await db.get(Membre, a.membre_id) if poste and poste.groupe_id == membre.groupe_id and mbr and mbr.groupe_id == membre.groupe_id: entries.append(CalendrierEntry( groupe_nom=groupe.nom, groupe_id=groupe.id, jour_reunion=groupe.jour_reunion, poste_nom=poste.nom, membre_prenom=mbr.prenom, date_debut=a.date_debut, )) entries.sort(key=lambda e: (e.groupe_nom, e.poste_nom)) return entries @router.get("/groupe/{groupe_id}") async def calendrier_groupe( groupe_id: str, membre=Depends(get_current_membre), db: AsyncSession = Depends(get_db), ): """Détail des serviteurs du groupe courant uniquement.""" if str(groupe_id) != str(membre.groupe_id): return {"groupe": None, "serviteurs": []} groupe = await db.get(Groupe, membre.groupe_id) if not groupe: return {"groupe": None, "serviteurs": []} result = await db.execute( select(Affectation).where( Affectation.groupe_id == membre.groupe_id, Affectation.statut == "actif", ) ) affectations = result.scalars().all() serviteurs = [] for a in affectations: poste = await db.get(Poste, a.poste_id) mbr = await db.get(Membre, a.membre_id) if poste and poste.groupe_id == membre.groupe_id and mbr and mbr.groupe_id == membre.groupe_id: serviteurs.append({ "poste": poste.nom, "categorie": poste.categorie, "prenom": mbr.prenom, "depuis": str(a.date_debut), }) serviteurs.sort(key=lambda s: s.get("poste", "")) return { "groupe": { "id": str(groupe.id), "nom": groupe.nom, "jour_reunion": groupe.jour_reunion, "adresse": groupe.adresse_local, }, "serviteurs": serviteurs, }