[BDD-S1] Ajustement schéma « validations » (traçabilité complète) #8
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
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?
Description
Compléter la table validations pour tracer qui a validé et quoi.
Tâches
Ajouter colonnes : valide_par UUID REFERENCES utilisateurs(id), commentaire TEXT.
Index sur (id_utilisateur, cree_le) déjà prévu ; ajouter (valide_par, cree_le).
Script 06_validations_enrich.sql.
Critères d’acceptation
Insertion d’une validation avec valide_par OK.
Requêtes par utilisateur validé et par valideur OK.
Tests rapides (à coller dans psql)
-- a) Créons un gestionnaire (valideur) temporaire si besoin
INSERT INTO utilisateurs (id, courriel, mot_de_passe_hash, prenom, nom, role, statut)
VALUES ('77777777-7777-7777-7777-777777777777', 'validator@example.com', 'hash', 'Val', 'Idateur', 'gestionnaire', 'accepte')
ON CONFLICT (id) DO NOTHING;
-- b) Ajout d'une validation "acceptée" par ce gestionnaire
INSERT INTO validations (id, id_utilisateur, statut, commentaire, valide_par, cree_le)
VALUES ('v0000000-0000-0000-0000-000000000002',
'66666666-6666-6666-6666-666666666666', -- utilisateur validé (ex: AM du seed)
'accepte',
'Contrôle OK.',
'77777777-7777-7777-7777-777777777777',
NOW())
ON CONFLICT (id) DO NOTHING;
-- c) Vérif de la ligne
SELECT id, id_utilisateur, statut, valide_par, cree_le
FROM validations
WHERE id = 'v0000000-0000-0000-0000-000000000002';
-- d) ON DELETE SET NULL : on supprime le compte du valideur
DELETE FROM utilisateurs WHERE id = '77777777-7777-7777-7777-777777777777';
-- e) La validation doit rester, avec valide_par = NULL
SELECT id, id_utilisateur, statut, valide_par
FROM validations
WHERE id = 'v0000000-0000-0000-0000-000000000002';
-- f) Indices utilisés ? (optionnel)
EXPLAIN ANALYZE
SELECT * FROM validations
WHERE valide_par IS NULL
ORDER BY cree_le DESC
LIMIT 20;
EXPLAIN ANALYZE
SELECT * FROM validations
WHERE id_utilisateur = '66666666-6666-6666-6666-666666666666'
ORDER BY cree_le DESC
LIMIT 20;
Attendus :
La ligne de validation existe et référence bien le valide_par au départ.
Après suppression du valideur, la validation reste et valide_par devient NULL (historique conservé).
Les plans d’exécution montrent un scan indexé sur les requêtes ci-dessus.
Mise à jour DBML / Draw.io (petit diff)
Table validations {
id uuid [pk]
id_utilisateur uuid [ref: > utilisateurs.id, note: 'utilisateur validé – ON DELETE SET NULL']
statut varchar [note: 'ENUM SQL (ex: accepte, rejete)']
commentaire text
valide_par uuid [ref: > utilisateurs.id, note: 'gestionnaire/admin – ON DELETE SET NULL'] // <-- ajouté
cree_le timestamp
modifie_le timestamp
indexes {
(id_utilisateur, cree_le)
(valide_par, cree_le) // <-- ajouté
statut
}
}
Ajouter migrations/06_validations_enrich.sql
A tester sur Docker