modification de la base de donnée

This commit is contained in:
951095 2025-08-21 19:03:56 +02:00
parent 2d5b886b7d
commit 2662375771
2 changed files with 195 additions and 184 deletions

179
BDD.sql
View File

@ -1,30 +1,62 @@
-- ==========================================================
-- Script de création BDD PostgreSQL - Sprint 1
-- ==========================================================
-- Extension UUID (si non déjà activée)
CREATE EXTENSION IF NOT EXISTS "pgcrypto"; CREATE EXTENSION IF NOT EXISTS "pgcrypto";
-- ==========================================================
-- ENUMS
-- ==========================================================
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'role_type') THEN
CREATE TYPE role_type AS ENUM ('parent', 'gestionnaire', 'super_admin', 'assistante_maternelle');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'genre_type') THEN
CREATE TYPE genre_type AS ENUM ('H', 'F', 'Autre');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_utilisateur_type') THEN
CREATE TYPE statut_utilisateur_type AS ENUM ('en_attente','actif','suspendu');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_enfant_type') THEN
CREATE TYPE statut_enfant_type AS ENUM ('a_naitre','actif','scolarise');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_dossier_type') THEN
CREATE TYPE statut_dossier_type AS ENUM ('envoye','accepte','refuse');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_contrat_type') THEN
CREATE TYPE statut_contrat_type AS ENUM ('brouillon','en_attente_signature','valide','resilie');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_avenant_type') THEN
CREATE TYPE statut_avenant_type AS ENUM ('propose','accepte','refuse');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'type_evenement_type') THEN
CREATE TYPE type_evenement_type AS ENUM ('absence_enfant','conge_am','conge_parent','arret_maladie_am','evenement_rpe');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_evenement_type') THEN
CREATE TYPE statut_evenement_type AS ENUM ('propose','valide','refuse');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_validation_type') THEN
CREATE TYPE statut_validation_type AS ENUM ('en_attente','valide','refuse');
END IF;
END $$;
-- ========================================================== -- ==========================================================
-- Table : utilisateurs -- Table : utilisateurs
-- ========================================================== -- ==========================================================
CREATE TABLE utilisateurs ( CREATE TABLE utilisateurs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
courriel VARCHAR NOT NULL UNIQUE, courriel VARCHAR(255) NOT NULL UNIQUE,
CHECK (courriel ~* '^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$'),
mot_de_passe_hash TEXT NOT NULL, mot_de_passe_hash TEXT NOT NULL,
prenom VARCHAR, prenom VARCHAR(100),
nom VARCHAR, nom VARCHAR(100),
genre VARCHAR, genre genre_type,
role VARCHAR, -- super_admin, gestionnaire, parent, assistante_maternelle role role_type NOT NULL,
statut VARCHAR DEFAULT 'en_attente', statut statut_utilisateur_type DEFAULT 'en_attente',
telephone VARCHAR, telephone VARCHAR(20),
adresse VARCHAR, adresse TEXT,
photo_url TEXT, photo_url TEXT,
consentement_photo BOOLEAN, consentement_photo BOOLEAN DEFAULT false,
date_consentement_photo TIMESTAMP, date_consentement_photo TIMESTAMPTZ,
changement_mdp_obligatoire BOOLEAN DEFAULT false, changement_mdp_obligatoire BOOLEAN DEFAULT false,
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -32,15 +64,15 @@ CREATE TABLE utilisateurs (
-- ========================================================== -- ==========================================================
CREATE TABLE assistantes_maternelles ( CREATE TABLE assistantes_maternelles (
id_utilisateur UUID PRIMARY KEY REFERENCES utilisateurs(id) ON DELETE CASCADE, id_utilisateur UUID PRIMARY KEY REFERENCES utilisateurs(id) ON DELETE CASCADE,
numero_agrement VARCHAR, numero_agrement VARCHAR(50),
date_naissance DATE, date_naissance DATE,
ville_naissance VARCHAR, ville_naissance VARCHAR(100),
pays_naissance VARCHAR, pays_naissance CHAR(2),
nir_chiffre TEXT, nir_chiffre CHAR(15),
nb_max_enfants INT, nb_max_enfants INT,
biographie TEXT, biographie TEXT,
disponible BOOLEAN, disponible BOOLEAN DEFAULT true,
ville_residence VARCHAR ville_residence VARCHAR(100)
); );
-- ========================================================== -- ==========================================================
@ -56,16 +88,16 @@ CREATE TABLE parents (
-- ========================================================== -- ==========================================================
CREATE TABLE enfants ( CREATE TABLE enfants (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
statut VARCHAR, -- a_naitre, actif, scolarise statut statut_enfant_type,
prenom VARCHAR, prenom VARCHAR(100),
nom VARCHAR, nom VARCHAR(100),
genre VARCHAR, genre genre_type,
date_naissance DATE, date_naissance DATE,
date_prevue_naissance DATE, date_prevue_naissance DATE,
photo_url TEXT, photo_url TEXT,
consentement_photo BOOLEAN, consentement_photo BOOLEAN DEFAULT false,
date_consentement_photo TIMESTAMP, date_consentement_photo TIMESTAMPTZ,
est_multiple BOOLEAN est_multiple BOOLEAN DEFAULT false
); );
-- ========================================================== -- ==========================================================
@ -85,13 +117,13 @@ CREATE TABLE dossiers (
id_parent UUID REFERENCES parents(id_utilisateur) ON DELETE CASCADE, id_parent UUID REFERENCES parents(id_utilisateur) ON DELETE CASCADE,
id_enfant UUID REFERENCES enfants(id) ON DELETE CASCADE, id_enfant UUID REFERENCES enfants(id) ON DELETE CASCADE,
presentation TEXT, presentation TEXT,
type_contrat VARCHAR, type_contrat VARCHAR(50),
repas BOOLEAN, repas BOOLEAN DEFAULT false,
budget DECIMAL, budget NUMERIC(10,2),
planning_souhaite JSONB, planning_souhaite JSONB,
statut VARCHAR DEFAULT 'envoye', statut statut_dossier_type DEFAULT 'envoye',
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -102,8 +134,8 @@ CREATE TABLE messages (
id_dossier UUID REFERENCES dossiers(id) ON DELETE CASCADE, id_dossier UUID REFERENCES dossiers(id) ON DELETE CASCADE,
id_expediteur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE, id_expediteur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE,
contenu TEXT, contenu TEXT,
re_redige_par_ia BOOLEAN, re_redige_par_ia BOOLEAN DEFAULT false,
cree_le TIMESTAMP DEFAULT now() cree_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -113,15 +145,15 @@ CREATE TABLE contrats (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
id_dossier UUID UNIQUE REFERENCES dossiers(id) ON DELETE CASCADE, id_dossier UUID UNIQUE REFERENCES dossiers(id) ON DELETE CASCADE,
planning JSONB, planning JSONB,
tarif_horaire DECIMAL, tarif_horaire NUMERIC(6,2),
indemnites_repas DECIMAL, indemnites_repas NUMERIC(6,2),
date_debut DATE, date_debut DATE,
statut VARCHAR DEFAULT 'brouillon', statut statut_contrat_type DEFAULT 'brouillon',
signe_parent BOOLEAN, signe_parent BOOLEAN DEFAULT false,
signe_am BOOLEAN, signe_am BOOLEAN DEFAULT false,
finalise_le TIMESTAMP, finalise_le TIMESTAMPTZ,
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -132,9 +164,9 @@ CREATE TABLE avenants_contrats (
id_contrat UUID REFERENCES contrats(id) ON DELETE CASCADE, id_contrat UUID REFERENCES contrats(id) ON DELETE CASCADE,
modifications JSONB, modifications JSONB,
initie_par UUID REFERENCES utilisateurs(id), initie_par UUID REFERENCES utilisateurs(id),
statut VARCHAR DEFAULT 'propose', statut statut_avenant_type DEFAULT 'propose',
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -142,19 +174,19 @@ CREATE TABLE avenants_contrats (
-- ========================================================== -- ==========================================================
CREATE TABLE evenements ( CREATE TABLE evenements (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
type VARCHAR, -- absence_enfant, conge_am, conge_parent, arret_maladie_am, evenement_rpe type type_evenement_type,
id_enfant UUID REFERENCES enfants(id) ON DELETE CASCADE, id_enfant UUID REFERENCES enfants(id) ON DELETE CASCADE,
id_am UUID REFERENCES utilisateurs(id), id_am UUID REFERENCES utilisateurs(id),
id_parent UUID REFERENCES parents(id_utilisateur), id_parent UUID REFERENCES parents(id_utilisateur),
cree_par UUID REFERENCES utilisateurs(id), cree_par UUID REFERENCES utilisateurs(id),
date_debut DATE, date_debut TIMESTAMPTZ,
date_fin DATE, date_fin TIMESTAMPTZ,
commentaires TEXT, commentaires TEXT,
statut VARCHAR DEFAULT 'propose', statut statut_evenement_type DEFAULT 'propose',
delai_grace DATE, delai_grace TIMESTAMPTZ,
urgent BOOLEAN, urgent BOOLEAN DEFAULT false,
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -164,24 +196,7 @@ CREATE TABLE signalements_bugs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
id_utilisateur UUID REFERENCES utilisateurs(id), id_utilisateur UUID REFERENCES utilisateurs(id),
description TEXT, description TEXT,
cree_le TIMESTAMP DEFAULT now() cree_le TIMESTAMPTZ DEFAULT now()
);
-- ==========================================================
-- Table : roles
-- ==========================================================
CREATE TABLE roles (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
nom VARCHAR NOT NULL UNIQUE
);
-- ==========================================================
-- Table : user_roles
-- ==========================================================
CREATE TABLE user_roles (
id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE,
id_role UUID REFERENCES roles(id) ON DELETE CASCADE,
PRIMARY KEY (id_utilisateur, id_role)
); );
-- ========================================================== -- ==========================================================
@ -191,8 +206,8 @@ CREATE TABLE uploads (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE SET NULL, id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE SET NULL,
fichier_url TEXT NOT NULL, fichier_url TEXT NOT NULL,
type VARCHAR, type VARCHAR(50),
cree_le TIMESTAMP DEFAULT now() cree_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -203,7 +218,7 @@ CREATE TABLE notifications (
id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE, id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE,
contenu TEXT, contenu TEXT,
lu BOOLEAN DEFAULT false, lu BOOLEAN DEFAULT false,
cree_le TIMESTAMP DEFAULT now() cree_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -212,8 +227,8 @@ CREATE TABLE notifications (
CREATE TABLE validations ( CREATE TABLE validations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
id_utilisateur UUID REFERENCES utilisateurs(id), id_utilisateur UUID REFERENCES utilisateurs(id),
type VARCHAR, type VARCHAR(50),
statut VARCHAR DEFAULT 'en_attente', statut statut_validation_type DEFAULT 'en_attente',
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );

View File

@ -1,30 +1,62 @@
-- ==========================================================
-- Script de création BDD PostgreSQL - Sprint 1
-- ==========================================================
-- Extension UUID (si non déjà activée)
CREATE EXTENSION IF NOT EXISTS "pgcrypto"; CREATE EXTENSION IF NOT EXISTS "pgcrypto";
-- ==========================================================
-- ENUMS
-- ==========================================================
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'role_type') THEN
CREATE TYPE role_type AS ENUM ('parent', 'gestionnaire', 'super_admin', 'assistante_maternelle');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'genre_type') THEN
CREATE TYPE genre_type AS ENUM ('H', 'F', 'Autre');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_utilisateur_type') THEN
CREATE TYPE statut_utilisateur_type AS ENUM ('en_attente','actif','suspendu');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_enfant_type') THEN
CREATE TYPE statut_enfant_type AS ENUM ('a_naitre','actif','scolarise');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_dossier_type') THEN
CREATE TYPE statut_dossier_type AS ENUM ('envoye','accepte','refuse');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_contrat_type') THEN
CREATE TYPE statut_contrat_type AS ENUM ('brouillon','en_attente_signature','valide','resilie');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_avenant_type') THEN
CREATE TYPE statut_avenant_type AS ENUM ('propose','accepte','refuse');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'type_evenement_type') THEN
CREATE TYPE type_evenement_type AS ENUM ('absence_enfant','conge_am','conge_parent','arret_maladie_am','evenement_rpe');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_evenement_type') THEN
CREATE TYPE statut_evenement_type AS ENUM ('propose','valide','refuse');
END IF;
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'statut_validation_type') THEN
CREATE TYPE statut_validation_type AS ENUM ('en_attente','valide','refuse');
END IF;
END $$;
-- ========================================================== -- ==========================================================
-- Table : utilisateurs -- Table : utilisateurs
-- ========================================================== -- ==========================================================
CREATE TABLE utilisateurs ( CREATE TABLE utilisateurs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
courriel VARCHAR NOT NULL UNIQUE, courriel VARCHAR(255) NOT NULL UNIQUE,
CHECK (courriel ~* '^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$'),
mot_de_passe_hash TEXT NOT NULL, mot_de_passe_hash TEXT NOT NULL,
prenom VARCHAR, prenom VARCHAR(100),
nom VARCHAR, nom VARCHAR(100),
genre VARCHAR, genre genre_type,
role VARCHAR, -- super_admin, gestionnaire, parent, assistante_maternelle role role_type NOT NULL,
statut VARCHAR DEFAULT 'en_attente', statut statut_utilisateur_type DEFAULT 'en_attente',
telephone VARCHAR, telephone VARCHAR(20),
adresse VARCHAR, adresse TEXT,
photo_url TEXT, photo_url TEXT,
consentement_photo BOOLEAN, consentement_photo BOOLEAN DEFAULT false,
date_consentement_photo TIMESTAMP, date_consentement_photo TIMESTAMPTZ,
changement_mdp_obligatoire BOOLEAN DEFAULT false, changement_mdp_obligatoire BOOLEAN DEFAULT false,
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -32,15 +64,15 @@ CREATE TABLE utilisateurs (
-- ========================================================== -- ==========================================================
CREATE TABLE assistantes_maternelles ( CREATE TABLE assistantes_maternelles (
id_utilisateur UUID PRIMARY KEY REFERENCES utilisateurs(id) ON DELETE CASCADE, id_utilisateur UUID PRIMARY KEY REFERENCES utilisateurs(id) ON DELETE CASCADE,
numero_agrement VARCHAR, numero_agrement VARCHAR(50),
date_naissance DATE, date_naissance DATE,
ville_naissance VARCHAR, ville_naissance VARCHAR(100),
pays_naissance VARCHAR, pays_naissance CHAR(2),
nir_chiffre TEXT, nir_chiffre CHAR(15),
nb_max_enfants INT, nb_max_enfants INT,
biographie TEXT, biographie TEXT,
disponible BOOLEAN, disponible BOOLEAN DEFAULT true,
ville_residence VARCHAR ville_residence VARCHAR(100)
); );
-- ========================================================== -- ==========================================================
@ -56,16 +88,16 @@ CREATE TABLE parents (
-- ========================================================== -- ==========================================================
CREATE TABLE enfants ( CREATE TABLE enfants (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
statut VARCHAR, -- a_naitre, actif, scolarise statut statut_enfant_type,
prenom VARCHAR, prenom VARCHAR(100),
nom VARCHAR, nom VARCHAR(100),
genre VARCHAR, genre genre_type,
date_naissance DATE, date_naissance DATE,
date_prevue_naissance DATE, date_prevue_naissance DATE,
photo_url TEXT, photo_url TEXT,
consentement_photo BOOLEAN, consentement_photo BOOLEAN DEFAULT false,
date_consentement_photo TIMESTAMP, date_consentement_photo TIMESTAMPTZ,
est_multiple BOOLEAN est_multiple BOOLEAN DEFAULT false
); );
-- ========================================================== -- ==========================================================
@ -85,13 +117,13 @@ CREATE TABLE dossiers (
id_parent UUID REFERENCES parents(id_utilisateur) ON DELETE CASCADE, id_parent UUID REFERENCES parents(id_utilisateur) ON DELETE CASCADE,
id_enfant UUID REFERENCES enfants(id) ON DELETE CASCADE, id_enfant UUID REFERENCES enfants(id) ON DELETE CASCADE,
presentation TEXT, presentation TEXT,
type_contrat VARCHAR, type_contrat VARCHAR(50),
repas BOOLEAN, repas BOOLEAN DEFAULT false,
budget DECIMAL, budget NUMERIC(10,2),
planning_souhaite JSONB, planning_souhaite JSONB,
statut VARCHAR DEFAULT 'envoye', statut statut_dossier_type DEFAULT 'envoye',
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -102,8 +134,8 @@ CREATE TABLE messages (
id_dossier UUID REFERENCES dossiers(id) ON DELETE CASCADE, id_dossier UUID REFERENCES dossiers(id) ON DELETE CASCADE,
id_expediteur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE, id_expediteur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE,
contenu TEXT, contenu TEXT,
re_redige_par_ia BOOLEAN, re_redige_par_ia BOOLEAN DEFAULT false,
cree_le TIMESTAMP DEFAULT now() cree_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -113,15 +145,15 @@ CREATE TABLE contrats (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
id_dossier UUID UNIQUE REFERENCES dossiers(id) ON DELETE CASCADE, id_dossier UUID UNIQUE REFERENCES dossiers(id) ON DELETE CASCADE,
planning JSONB, planning JSONB,
tarif_horaire DECIMAL, tarif_horaire NUMERIC(6,2),
indemnites_repas DECIMAL, indemnites_repas NUMERIC(6,2),
date_debut DATE, date_debut DATE,
statut VARCHAR DEFAULT 'brouillon', statut statut_contrat_type DEFAULT 'brouillon',
signe_parent BOOLEAN, signe_parent BOOLEAN DEFAULT false,
signe_am BOOLEAN, signe_am BOOLEAN DEFAULT false,
finalise_le TIMESTAMP, finalise_le TIMESTAMPTZ,
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -132,9 +164,9 @@ CREATE TABLE avenants_contrats (
id_contrat UUID REFERENCES contrats(id) ON DELETE CASCADE, id_contrat UUID REFERENCES contrats(id) ON DELETE CASCADE,
modifications JSONB, modifications JSONB,
initie_par UUID REFERENCES utilisateurs(id), initie_par UUID REFERENCES utilisateurs(id),
statut VARCHAR DEFAULT 'propose', statut statut_avenant_type DEFAULT 'propose',
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -142,19 +174,19 @@ CREATE TABLE avenants_contrats (
-- ========================================================== -- ==========================================================
CREATE TABLE evenements ( CREATE TABLE evenements (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
type VARCHAR, -- absence_enfant, conge_am, conge_parent, arret_maladie_am, evenement_rpe type type_evenement_type,
id_enfant UUID REFERENCES enfants(id) ON DELETE CASCADE, id_enfant UUID REFERENCES enfants(id) ON DELETE CASCADE,
id_am UUID REFERENCES utilisateurs(id), id_am UUID REFERENCES utilisateurs(id),
id_parent UUID REFERENCES parents(id_utilisateur), id_parent UUID REFERENCES parents(id_utilisateur),
cree_par UUID REFERENCES utilisateurs(id), cree_par UUID REFERENCES utilisateurs(id),
date_debut DATE, date_debut TIMESTAMPTZ,
date_fin DATE, date_fin TIMESTAMPTZ,
commentaires TEXT, commentaires TEXT,
statut VARCHAR DEFAULT 'propose', statut statut_evenement_type DEFAULT 'propose',
delai_grace DATE, delai_grace TIMESTAMPTZ,
urgent BOOLEAN, urgent BOOLEAN DEFAULT false,
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -164,24 +196,7 @@ CREATE TABLE signalements_bugs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
id_utilisateur UUID REFERENCES utilisateurs(id), id_utilisateur UUID REFERENCES utilisateurs(id),
description TEXT, description TEXT,
cree_le TIMESTAMP DEFAULT now() cree_le TIMESTAMPTZ DEFAULT now()
);
-- ==========================================================
-- Table : roles
-- ==========================================================
CREATE TABLE roles (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
nom VARCHAR NOT NULL UNIQUE
);
-- ==========================================================
-- Table : user_roles
-- ==========================================================
CREATE TABLE user_roles (
id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE,
id_role UUID REFERENCES roles(id) ON DELETE CASCADE,
PRIMARY KEY (id_utilisateur, id_role)
); );
-- ========================================================== -- ==========================================================
@ -191,8 +206,8 @@ CREATE TABLE uploads (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE SET NULL, id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE SET NULL,
fichier_url TEXT NOT NULL, fichier_url TEXT NOT NULL,
type VARCHAR, type VARCHAR(50),
cree_le TIMESTAMP DEFAULT now() cree_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -203,7 +218,7 @@ CREATE TABLE notifications (
id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE, id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE,
contenu TEXT, contenu TEXT,
lu BOOLEAN DEFAULT false, lu BOOLEAN DEFAULT false,
cree_le TIMESTAMP DEFAULT now() cree_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
@ -212,24 +227,17 @@ CREATE TABLE notifications (
CREATE TABLE validations ( CREATE TABLE validations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
id_utilisateur UUID REFERENCES utilisateurs(id), id_utilisateur UUID REFERENCES utilisateurs(id),
type VARCHAR, type VARCHAR(50),
statut VARCHAR DEFAULT 'en_attente', statut statut_validation_type DEFAULT 'en_attente',
cree_le TIMESTAMP DEFAULT now(), cree_le TIMESTAMPTZ DEFAULT now(),
modifie_le TIMESTAMP DEFAULT now() modifie_le TIMESTAMPTZ DEFAULT now()
); );
-- ========================================================== -- ==========================================================
-- Initialisation d'un administrateur par défaut -- Initialisation d'un administrateur par défaut
-- ========================================================== -- ==========================================================
-- Insertion du rôle super_admin si non existant
INSERT INTO roles (id, nom)
VALUES (gen_random_uuid(), 'super_admin')
ON CONFLICT (nom) DO NOTHING;
-- Insertion de l'administrateur par défaut
INSERT INTO utilisateurs ( INSERT INTO utilisateurs (
id, id,
courriel, courriel,
@ -244,7 +252,7 @@ INSERT INTO utilisateurs (
VALUES ( VALUES (
gen_random_uuid(), gen_random_uuid(),
'admin@ptitspas.com', 'admin@ptitspas.com',
'motdepasse_hashé', -- à remplacer par le hash réel du mot de passe 'motdepasse_hashé', -- ⚠️ à remplacer par le hash réel du mot de passe
'Admin', 'Admin',
'PtitsPas', 'PtitsPas',
'super_admin', 'super_admin',
@ -253,15 +261,3 @@ VALUES (
now() now()
) )
ON CONFLICT (courriel) DO NOTHING; ON CONFLICT (courriel) DO NOTHING;
-- Récupération des IDs pour créer la liaison
WITH admin_user AS (
SELECT id FROM utilisateurs WHERE courriel = 'admin@ptitspas.com'
),
admin_role AS (
SELECT id FROM roles WHERE nom = 'super_admin'
)
INSERT INTO user_roles (id_utilisateur, id_role)
SELECT admin_user.id, admin_role.id
FROM admin_user, admin_role
ON CONFLICT DO NOTHING;