fix(db): V30/V31 aligner membres_roles avec entité + rendre colonnes notifications legacy nullables
- V30: ajoute membre_organisation_id/organisation_id/date_debut/fin/commentaire si absents, rend membre_id nullable (legacy V1), remplace uk_membre_role par uk_mr_membre_org_role, ajoute indexes. Idempotent via DO blocks. - V31: rend destinataire_id, titre, nombre_tentatives nullables dans notifications (colonnes legacy V1 que l'entité n'utilise plus, bloquaient les INSERT).
This commit is contained in:
@@ -0,0 +1,67 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- V30 — Alignement membres_roles avec l'entité Java MembreRole
|
||||||
|
--
|
||||||
|
-- Contexte : Hibernate update mode a pu créer membres_roles avant V1 (depuis
|
||||||
|
-- l'entité Java), OU V1 l'a créé avec membre_id. Les deux cas sont gérés.
|
||||||
|
-- Toutes les opérations sont défensives (IF EXISTS / DO blocks).
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
-- 1. Rendre membre_id nullable si la colonne existe encore (cas V1-first)
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1 FROM information_schema.columns
|
||||||
|
WHERE table_name = 'membres_roles' AND column_name = 'membre_id'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE membres_roles ALTER COLUMN membre_id DROP NOT NULL;
|
||||||
|
END IF;
|
||||||
|
END $$;
|
||||||
|
|
||||||
|
-- 2. Ajouter membre_organisation_id si absente
|
||||||
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS membre_organisation_id UUID
|
||||||
|
REFERENCES membres_organisations(id) ON DELETE CASCADE;
|
||||||
|
|
||||||
|
-- 3. Ajouter organisation_id si absente
|
||||||
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS organisation_id UUID
|
||||||
|
REFERENCES organisations(id) ON DELETE CASCADE;
|
||||||
|
|
||||||
|
-- 4. Ajouter date_debut / date_fin / commentaire si absents
|
||||||
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS date_debut DATE;
|
||||||
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS date_fin DATE;
|
||||||
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS commentaire VARCHAR(500);
|
||||||
|
|
||||||
|
-- 5. Ajouter les colonnes BaseEntity manquantes
|
||||||
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS date_modification TIMESTAMP;
|
||||||
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS version BIGINT DEFAULT 0;
|
||||||
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS cree_par VARCHAR(255);
|
||||||
|
ALTER TABLE membres_roles ADD COLUMN IF NOT EXISTS modifie_par VARCHAR(255);
|
||||||
|
|
||||||
|
-- 6. Supprimer l'ancienne contrainte unique V1 (membre_id, role_id) si présente
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1 FROM pg_constraint
|
||||||
|
WHERE conname = 'uk_membre_role' AND conrelid = 'membres_roles'::regclass
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE membres_roles DROP CONSTRAINT uk_membre_role;
|
||||||
|
END IF;
|
||||||
|
END $$;
|
||||||
|
|
||||||
|
-- 7. Ajouter la contrainte unique (membre_organisation_id, role_id) si absente
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1 FROM pg_constraint
|
||||||
|
WHERE conname = 'uk_mr_membre_org_role' AND conrelid = 'membres_roles'::regclass
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE membres_roles
|
||||||
|
ADD CONSTRAINT uk_mr_membre_org_role
|
||||||
|
UNIQUE (membre_organisation_id, role_id);
|
||||||
|
END IF;
|
||||||
|
END $$;
|
||||||
|
|
||||||
|
-- 8. Index de performance (IF NOT EXISTS — idempotent)
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_mr_membre_org ON membres_roles (membre_organisation_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_mr_organisation ON membres_roles (organisation_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_mr_role ON membres_roles (role_id);
|
||||||
|
CREATE INDEX IF NOT EXISTS idx_mr_actif ON membres_roles (actif);
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- V31 — Corrige les colonnes legacy NOT NULL de la table notifications
|
||||||
|
--
|
||||||
|
-- V1 a créé les colonnes suivantes avec NOT NULL :
|
||||||
|
-- - destinataire_id UUID
|
||||||
|
-- - titre VARCHAR(255)
|
||||||
|
--
|
||||||
|
-- L'entité Java Notification utilise désormais membre_id et sujet/corps, mais
|
||||||
|
-- les anciennes colonnes sont restées NOT NULL → les INSERTs depuis l'entité
|
||||||
|
-- échouent avec 23502 (violation NOT NULL).
|
||||||
|
--
|
||||||
|
-- Fix : rendre ces colonnes nullables (on ne les utilise plus depuis l'entité).
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
-- 1. destinataire_id : rendre nullable
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1 FROM information_schema.columns
|
||||||
|
WHERE table_name = 'notifications'
|
||||||
|
AND column_name = 'destinataire_id'
|
||||||
|
AND is_nullable = 'NO'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE notifications ALTER COLUMN destinataire_id DROP NOT NULL;
|
||||||
|
END IF;
|
||||||
|
END $$;
|
||||||
|
|
||||||
|
-- 2. titre : rendre nullable (remplacé par sujet)
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1 FROM information_schema.columns
|
||||||
|
WHERE table_name = 'notifications'
|
||||||
|
AND column_name = 'titre'
|
||||||
|
AND is_nullable = 'NO'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE notifications ALTER COLUMN titre DROP NOT NULL;
|
||||||
|
END IF;
|
||||||
|
END $$;
|
||||||
|
|
||||||
|
-- 3. nombre_tentatives : rendre nullable (défaut 0 déjà présent, mais NOT NULL bloque si l'entité ne le met pas)
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1 FROM information_schema.columns
|
||||||
|
WHERE table_name = 'notifications'
|
||||||
|
AND column_name = 'nombre_tentatives'
|
||||||
|
AND is_nullable = 'NO'
|
||||||
|
) THEN
|
||||||
|
-- Garder le default mais enlever NOT NULL pour éviter les crashes si l'entité ne définit pas la valeur
|
||||||
|
ALTER TABLE notifications ALTER COLUMN nombre_tentatives DROP NOT NULL;
|
||||||
|
ALTER TABLE notifications ALTER COLUMN nombre_tentatives SET DEFAULT 0;
|
||||||
|
END IF;
|
||||||
|
END $$;
|
||||||
Reference in New Issue
Block a user