diff --git a/migrations/06_validations_enrich.sql b/migrations/06_validations_enrich.sql new file mode 100644 index 0000000..65bacff --- /dev/null +++ b/migrations/06_validations_enrich.sql @@ -0,0 +1,53 @@ +-- ========================================================== +-- 06_validations_enrich.sql : Traçabilité complète des validations +-- - Ajoute la colonne 'valide_par' (FK -> utilisateurs.id) +-- - ON DELETE SET NULL pour conserver l'historique +-- - Ajoute index utiles pour les requêtes (valideur, statut, date) +-- A exécuter après : 01_init.sql, 02_indexes.sql, 03_checks.sql, 04_fk_policies.sql, 05_triggers.sql +-- ========================================================== + +BEGIN; + +-- 1) Colonne 'valide_par' si absente +ALTER TABLE validations + ADD COLUMN IF NOT EXISTS valide_par UUID NULL; + +-- 2) FK vers utilisateurs(id), ON DELETE SET NULL +DO $$ +DECLARE conname text; +BEGIN + SELECT tc.constraint_name INTO conname + FROM information_schema.table_constraints tc + JOIN information_schema.key_column_usage kcu + ON tc.constraint_name = kcu.constraint_name + AND tc.table_schema = kcu.table_schema + WHERE tc.table_schema = 'public' + AND tc.table_name = 'validations' + AND tc.constraint_type= 'FOREIGN KEY' + AND kcu.column_name = 'valide_par'; + + IF conname IS NOT NULL THEN + EXECUTE format('ALTER TABLE public.validations DROP CONSTRAINT %I', conname); + END IF; + + EXECUTE $sql$ + ALTER TABLE public.validations + ADD CONSTRAINT fk_validations_valide_par + FOREIGN KEY (valide_par) REFERENCES public.utilisateurs(id) ON DELETE SET NULL + $sql$; +END $$; + +-- 3) Index pour accélérer les recherches +-- - qui a validé quoi récemment ? +-- - toutes les validations par statut / par date +CREATE INDEX IF NOT EXISTS idx_validations_valide_par_cree_le + ON validations (valide_par, cree_le); + +-- Certains existent peut-être déjà : on sécurise +CREATE INDEX IF NOT EXISTS idx_validations_id_utilisateur_cree_le + ON validations (id_utilisateur, cree_le); + +CREATE INDEX IF NOT EXISTS idx_validations_statut + ON validations (statut); + +COMMIT;