IT-Stock/app/routers/destinataires.py
maxsoch 7ce6540924 Refonte des listings et arborescence de catégories à profondeur illimitée
Catégorie/SousCategorie fusionnées en un seul modèle auto-référencé
(parent_id), pour permettre une imbrication sans limite de niveaux. Les
listings matériels/catégories/destinataires passent en lignes repliées
(<details>) avec recherche côté serveur, ce qui corrige le débordement
horizontal du tableau tout-en-input et reste utilisable sur de longues
listes. Style de l'écran de scan également retravaillé (frontend-design).
2026-07-14 19:06:37 +02:00

43 lines
1.7 KiB
Python

"""Routes pour gérer la liste des emails qui reçoivent les alertes de stock bas."""
from fastapi import APIRouter, Depends, Form
from fastapi.requests import Request
from fastapi.responses import RedirectResponse
from sqlmodel import Session, select
from app.database import get_session
from app.models import DestinataireAlerte
from app.templates_engine import templates
router = APIRouter()
@router.get("/destinataires")
def lister_destinataires(request: Request, q: str = "", session: Session = Depends(get_session)):
"""Affiche la liste des emails configurés pour recevoir les alertes,
filtrée par ?q=... si fourni (même comportement que /materiels, pour
rester cohérent si la liste grandit)."""
tous = session.exec(select(DestinataireAlerte)).all()
destinataires = [d for d in tous if q.lower() in d.email.lower()] if q else tous
return templates.TemplateResponse(
request, "destinataires.html", {"destinataires": destinataires, "q": q}
)
@router.post("/destinataires")
def ajouter_destinataire(email: str = Form(...), session: Session = Depends(get_session)):
"""Ajoute un email à la liste des destinataires des alertes."""
session.add(DestinataireAlerte(email=email))
session.commit()
return RedirectResponse(url="/destinataires", status_code=303)
@router.post("/destinataires/{destinataire_id}/supprimer")
def supprimer_destinataire(destinataire_id: int, session: Session = Depends(get_session)):
"""Retire un email de la liste des destinataires."""
destinataire = session.get(DestinataireAlerte, destinataire_id)
if destinataire:
session.delete(destinataire)
session.commit()
return RedirectResponse(url="/destinataires", status_code=303)