L'écran d'administration du front proposait des boutons Modifier et
Désactiver qui n'appelaient rien (console.log côté client), faute
d'endpoints correspondants. Ajoute POST/PUT/DELETE sur /services,
/categories, /contacts et /monitorings, tous protégés par require_admin.
Deux garde-fous métier :
- la suppression d'un service ou d'une catégorie est refusée (409) tant
que des monitorings ou contacts y sont rattachés, avec le décompte
dans le message, plutôt que de laisser remonter une violation de clé
étrangère ;
- un monitoring est désactivé (actif = 0) et jamais supprimé, car
TABLE_FINAL référence son identifiant et l'historique doit rester
consultable.
Le rôle utilisateur est désormais typé par l'enum UserRole : Pydantic
le valide seul (422), ce qui supprime les deux contrôles manuels
dupliqués dans create_user et update_user.
Tests : 8 -> 16. Couvre la validation par enum, le refus 409 sur
rattachement, le 403 pour un non-administrateur et la désactivation
logique du monitoring.
main.py comptait 829 lignes et regroupait 9 domaines fonctionnels.
Il ne fait plus que l'assemblage de l'application (configuration,
middlewares, montage des routeurs), soit 115 lignes.
- routers/ : un module par domaine, chacun déclarant sa propre
dépendance d'authentification
- domain.py : enums UserRole et AuditAction, mapping MONITO_TABLES ;
les rôles étaient jusqu'ici répétés en dur à deux endroits
- helpers.py : conversion des lignes pyodbc, écriture du journal
- rate_limit.py : limiteur partagé, isolé pour éviter un import
circulaire entre main.py et le routeur d'authentification
Les codes HTTP littéraux (404, 401, 400, 201) passent aux constantes
fastapi.status, comme le faisait déjà auth.py. Les actions du journal
d'audit passent en paramètre SQL au lieu d'être concaténées.
Aucune route modifiée : la comparaison des specs OpenAPI avant/après
confirme que les 26 URL existantes sont identiques.
conftest patchait main.get_cursor ; chaque routeur important désormais
get_cursor dans son propre espace de noms, la fixture remplace le nom
dans tous les modules concernés.
Le repli de développement pointait en dur sur LaptopCA\SQLEXPRESS,
ce qui rendait l'API inutilisable sur toute autre machine sans éditer
le code. Le serveur vient désormais de DB_SERVER (défaut localhost),
et DB_TRUSTED_CONNECTION permet de forcer l'authentification Windows.
DB_PORT peut rester vide : une instance nommée (MonPoste\SQLEXPRESS)
se joint sans port explicite.
Ajoute sql/create_admin_jure.sql, script idempotent créant/réinitialisant
le compte de démonstration destiné aux personnes qui consultent le site
(rôle Admin). Aucune instruction USE : la base cible vient du paramètre
-d de la connexion, avec un garde-fou qui arrête le script si les tables
attendues sont absentes.
Copie aussi sql/data_sentinel_auth.sql (déjà présent dans le dump livré
sous RENDU/02_Dump_SQL/) : le README de ce dépôt le référençait déjà,
mais le dossier sql/ n'existait pas encore ici.
Documente le compte dans le tableau des comptes de démo du README.
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.