[BDD-S1] Ajustement schéma « validations » (traçabilité complète) #8

Closed
opened 2025-08-25 09:50:03 +00:00 by vdorge · 3 comments
Member

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.

## 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.
vdorge added this to the P'titsPas-Ynov project 2025-08-25 09:50:03 +00:00
vdorge added the
BDD
Implémentation
Sprint 1
labels 2025-08-25 10:01:38 +00:00
vdorge added this to the Sprint 1 – Mise en place BDD milestone 2025-08-25 10:01:40 +00:00
Author
Member

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.

# 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.
Author
Member

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
}
}

# 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 } }
Author
Member

Ajouter migrations/06_validations_enrich.sql

A tester sur Docker

Ajouter migrations/06_validations_enrich.sql A tester sur Docker
Sign in to join this conversation.
No description provided.