feat(dashboard): endpoint /dashboard/filtres restreint aux valeurs utilisées
VUE_CONSO ne rattache pas tous les services/catégories des référentiels SERVICE et CATEGORIE à un monitoring actif (ex. "Business Intelligence"). Les proposer tels quels dans les filtres du dashboard menait à un écran vide. Le nouvel endpoint renvoie un SELECT DISTINCT service, categorie sur VUE_CONSO, avec les combinaisons pour permettre un filtrage en cascade côté frontend. Ajoute un test dédié et régénère docs/openapi.json.
This commit is contained in:
@@ -331,6 +331,33 @@ def get_dashboard(
|
||||
return rows_to_list(cursor, cursor.fetchall())
|
||||
|
||||
|
||||
@router.get("/dashboard/filtres", tags=["Dashboard"])
|
||||
def get_dashboard_filtres():
|
||||
"""
|
||||
Valeurs de filtre réellement présentes dans VUE_CONSO.
|
||||
|
||||
Les référentiels SERVICE / CATEGORIE contiennent des entrées auxquelles
|
||||
aucun monitoring actif n'est rattaché (ex. « Business Intelligence »).
|
||||
Les proposer dans les menus déroulants du dashboard mène à un écran vide :
|
||||
cet endpoint ne renvoie que les valeurs qui ramènent au moins un monitoring.
|
||||
|
||||
`combinaisons` permet au frontend de restreindre les catégories proposées
|
||||
au service sélectionné.
|
||||
"""
|
||||
with get_cursor() as cursor:
|
||||
cursor.execute(
|
||||
"SELECT DISTINCT service, categorie FROM VUE_CONSO "
|
||||
"ORDER BY service, categorie"
|
||||
)
|
||||
combinaisons = [{"service": r[0], "categorie": r[1]} for r in cursor.fetchall()]
|
||||
|
||||
return {
|
||||
"services" : sorted({c["service"] for c in combinaisons}),
|
||||
"categories" : sorted({c["categorie"] for c in combinaisons}),
|
||||
"combinaisons" : combinaisons,
|
||||
}
|
||||
|
||||
|
||||
@router.get("/dashboard/summary", tags=["Dashboard"])
|
||||
def get_dashboard_summary():
|
||||
"""KPI globaux pour les 4 cartes du dashboard."""
|
||||
|
||||
Reference in New Issue
Block a user