groupe-meditation/backend/app/routers/calendrier.py

96 lines
3.1 KiB
Python
Raw Normal View History

"""Routes C2 — Calendrier du groupe."""
2026-03-04 14:01:00 -05:00
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"])
2026-03-04 14:01:00 -05:00
@router.get("/", response_model=list[CalendrierEntry])
async def calendrier_groupe_courant(
2026-03-04 14:01:00 -05:00
membre=Depends(get_current_membre),
db: AsyncSession = Depends(get_db),
):
"""C2 — Calendrier des serviteurs du groupe courant."""
2026-03-04 14:01:00 -05:00
groupe = await db.get(Groupe, membre.groupe_id)
if not groupe:
return []
2026-03-04 14:01:00 -05:00
result = await db.execute(
select(Affectation).where(
Affectation.groupe_id == membre.groupe_id,
2026-03-04 14:01:00 -05:00
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:
2026-03-04 14:01:00 -05:00
entries.append(CalendrierEntry(
groupe_nom=groupe.nom,
groupe_id=groupe.id,
jour_reunion=groupe.jour_reunion,
2026-03-04 14:01:00 -05:00
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)
2026-03-04 14:01:00 -05:00
if not groupe:
return {"groupe": None, "serviteurs": []}
result = await db.execute(
select(Affectation).where(
Affectation.groupe_id == membre.groupe_id,
2026-03-04 14:01:00 -05:00
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:
2026-03-04 14:01:00 -05:00
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,
}