api : le tableau de bord sur données fictives - routes L1 à L4 (#94) #137
No reviewers
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision!137
Loading…
Reference in a new issue
No description provided.
Delete branch "marvin/94-api-tableau-de-bord"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ce que ça change
L'API du tableau de bord servie sur le jeu de démonstration figé : référentiel des sites, vue Parc, vue Site (série, prévision, recommandations, traçabilité) et vue Qualité (disponibilité, journal de collecte, alertes). Les routes, les schémas de réponse, le gating par session et les codes d'erreur sont définitifs ; seule la source des valeurs est provisoire, et le jour où la zone or arrive, seuls les corps de
dashboard/repository.pychangent.Ce lot était mêlé au front dans #127 ; il en est extrait pour être relu seul. Rien ne le consomme encore — le tableau de bord qui l'appelle est porté par #24 (PR séparées).
Closes #94
Preuve
Relecture
Ce qui suit le code
(rien de coché : aucun runbook, ADR, incident ni variable d'environnement nouvelle de ce côté)
Où regarder en priorité
Le préfixe des routes a changé, et c'est le point à valider. Le routeur portait
prefix="/api/v1". Or le Caddyfile relaie enhandle_path /api/*, qui retire/apiavant de transmettre : un appel navigateur/api/v1/sitesarrivait à l'API en/v1/sites, que rien ne servait — 404 en production. Invisible en développement, où le proxy Vite conserve le préfixe.Le routeur sert donc
/v1, même convention que/authet/health, déjà à la racine pour cette raison. Le préfixe/apiredevient une affaire de Caddy seule. Le correctif côté front est dans la PR de l'écran Parc.Autres points :
dashboard/autorisation.pyrend encore les sept sites à tout utilisateur authentifié — la tableops.acces_siteexiste en base (migration 0015) mais rien ne la lit encore.fsans interpolation que ruff refusait traînait dans les tests de traçabilité ; corrigé au passage, sinon la chaîne recalait la PR.GET /api/v1/sites/{id}/mesures — un appel par site affiché, comme l'annote la maquette #24. Chaque site est mis à l'échelle du profil du parc plutôt que de porter sa propre courbe inventée (aucune donnée historique par site n'existe encore dans le jeu de démonstration). Un site sans consommation courante (capteur muet, SITE006) lève SourceIndisponible côté dépôt, traduite en 503 côté route : le front garde les autres sites affichés, comme l'état « source indisponible » de la maquette. Pas de reference_kw par site : la référence de comparaison (EF-07) n'est publiée qu'au parc, en inventer une par site afficherait un nombre que personne n'a calculé. 19 tests neufs, couverture dashboard/ à 100 %. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GnUAobdPeQynk8EnCeMLdWapi : le tableau de bord sur donn�es fictives � routes L1 � L4 (#94)to api : le tableau de bord sur données fictives — routes L1 à L4 (#94)Très bon travail mais il y a 2 points à revoir (et un autre mineur).
Dans les critères du #94 il est demandé que "Le README de l'API liste les routes et explique comment lancer l'API sur le jeu de démonstration." or plusieurs routes ne sont manquantes (il n'y en a que 4/10 on dirait qu'il y a celles du Lot 2 mais pas le reste)
Deuxième point : tu as fix côté entrant mais pas sortant, FastAPI émet aussi des URLs qui pointent vers lui-même. Il les construit en préfixant par root_path (fastapi/applications.py:1124). Donc sans réglage, root_path vaut "", et ça va casser la doc car https://app.g2.enervision/api/docs -> Swagger va demander https://app.g2.enervision/openapi.json sans api/
Dernier point (qui est probablement plus une incohérence dans le ticket qu'autre chose) : bin/api / bin/api.ps1 n'existe pas alors qu'il est mentionné dans "comment on vérifie" et "à savoir" du #94
Merci - les trois points sont traités dans
c98ac01.Routes. Le bon compte : le tableau s'arrêtait au lot L2. Les six manquantes sont ajoutées, groupées par écran, avec paramètres et codes d'erreur - plus la mise en route sur le jeu de démonstration, l'autre moitié du critère.
root_path. Corrigé, mais par un réglage plutôt que par--root-pathen ligne de commande :ENERVISION_API_ROOT_PATH, vide par défaut,/apien production. Trois tests danstest_app_root_path.py, dont un qui vérifie que/healthrépond toujours tel quel : root_path corrige la sortie, pas l'entrée. LeCaddyfileet le runbook réclamaient déjà--root-path /api« côté pile API (#94) » ; leurs commentaires sont réalignés dessus.bin/api. Plutôt un manque qu'une incohérence du ticket : le lanceur n'avait jamais été écrit. Il existe, avecbin/api.ps1, au-dessus d'une sonde partagée - sans base il coupe les migrations et lance quand même, en disant que seul/healthrépondra.api : le tableau de bord sur données fictives — routes L1 à L4 (#94)to api : le tableau de bord sur données fictives - routes L1 à L4 (#94)@marvin Ok pour moi quand tes tests passeront