Consultation des alertes de consommation, filtrable par site_id et severity a l'identique du contrat GET /alerts de l'API Mock. Reprend le gabarit endpoints -> services -> repositories -> models pose par sites, sur la table alert deja creee par la revision Alembic e6d2026091501. Generalise aussi le garde-fou OpenAPI du 403 (ROUTES_A_ROLE) au-dela du seul tag users, pour que l'ajout d'alerts a la liste des routes protegees par role soit reellement verifie. Closes #59
22 lines
728 B
Python
22 lines
728 B
Python
from collections.abc import Sequence
|
|
|
|
from sqlalchemy import select
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.models.energy import Alert
|
|
|
|
|
|
class AlertRepository:
|
|
def __init__(self, session: AsyncSession) -> None:
|
|
self._session = session
|
|
|
|
async def list_all(
|
|
self, *, site_id: str | None = None, severity: str | None = None
|
|
) -> Sequence[Alert]:
|
|
requete = select(Alert).order_by(Alert.timestamp.desc(), Alert.alert_id.desc())
|
|
if site_id is not None:
|
|
requete = requete.where(Alert.site_id == site_id)
|
|
if severity is not None:
|
|
requete = requete.where(Alert.severity == severity)
|
|
return (await self._session.scalars(requete)).all()
|