petitspas/database/migrations/06_validations_enrich.sql
Julien Martin bbf73458cb feat: Intégration de la base de données PostgreSQL depuis YNOV
- Structure complète: utilisateurs, parents, assmat, enfants, contrats
- Migrations SQL avec enums et contraintes
- Seed: 1 super_admin (admin@ptits-pas.fr)
- Mot de passe: 4dm1n1strateur (hash bcrypt)
2025-11-24 15:44:39 +01:00

54 lines
1.8 KiB
PL/PgSQL

-- ==========================================================
-- 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;