-- ========================================================== -- Script de création BDD PostgreSQL - Sprint 1 -- ========================================================== -- Extension UUID (si non déjà activée) CREATE EXTENSION IF NOT EXISTS "pgcrypto"; -- ========================================================== -- Table : utilisateurs -- ========================================================== CREATE TABLE utilisateurs ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), courriel VARCHAR NOT NULL UNIQUE, mot_de_passe_hash TEXT NOT NULL, prenom VARCHAR, nom VARCHAR, genre VARCHAR, role VARCHAR, -- super_admin, gestionnaire, parent, assistante_maternelle statut VARCHAR DEFAULT 'en_attente', telephone VARCHAR, adresse VARCHAR, photo_url TEXT, consentement_photo BOOLEAN, date_consentement_photo TIMESTAMP, changement_mdp_obligatoire BOOLEAN DEFAULT false, cree_le TIMESTAMP DEFAULT now(), modifie_le TIMESTAMP DEFAULT now() ); -- ========================================================== -- Table : assistantes_maternelles -- ========================================================== CREATE TABLE assistantes_maternelles ( id_utilisateur UUID PRIMARY KEY REFERENCES utilisateurs(id) ON DELETE CASCADE, numero_agrement VARCHAR, date_naissance DATE, ville_naissance VARCHAR, pays_naissance VARCHAR, nir_chiffre TEXT, nb_max_enfants INT, biographie TEXT, disponible BOOLEAN, ville_residence VARCHAR ); -- ========================================================== -- Table : parents -- ========================================================== CREATE TABLE parents ( id_utilisateur UUID PRIMARY KEY REFERENCES utilisateurs(id) ON DELETE CASCADE, id_co_parent UUID REFERENCES utilisateurs(id) ); -- ========================================================== -- Table : enfants -- ========================================================== CREATE TABLE enfants ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), statut VARCHAR, -- a_naitre, actif, scolarise prenom VARCHAR, nom VARCHAR, genre VARCHAR, date_naissance DATE, date_prevue_naissance DATE, photo_url TEXT, consentement_photo BOOLEAN, date_consentement_photo TIMESTAMP, est_multiple BOOLEAN ); -- ========================================================== -- Table : enfants_parents -- ========================================================== CREATE TABLE enfants_parents ( id_parent UUID REFERENCES parents(id_utilisateur) ON DELETE CASCADE, id_enfant UUID REFERENCES enfants(id) ON DELETE CASCADE, PRIMARY KEY (id_parent, id_enfant) ); -- ========================================================== -- Table : dossiers -- ========================================================== CREATE TABLE dossiers ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id_parent UUID REFERENCES parents(id_utilisateur) ON DELETE CASCADE, id_enfant UUID REFERENCES enfants(id) ON DELETE CASCADE, presentation TEXT, type_contrat VARCHAR, repas BOOLEAN, budget DECIMAL, planning_souhaite JSONB, statut VARCHAR DEFAULT 'envoye', cree_le TIMESTAMP DEFAULT now(), modifie_le TIMESTAMP DEFAULT now() ); -- ========================================================== -- Table : messages -- ========================================================== CREATE TABLE messages ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id_dossier UUID REFERENCES dossiers(id) ON DELETE CASCADE, id_expediteur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE, contenu TEXT, re_redige_par_ia BOOLEAN, cree_le TIMESTAMP DEFAULT now() ); -- ========================================================== -- Table : contrats -- ========================================================== CREATE TABLE contrats ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id_dossier UUID UNIQUE REFERENCES dossiers(id) ON DELETE CASCADE, planning JSONB, tarif_horaire DECIMAL, indemnites_repas DECIMAL, date_debut DATE, statut VARCHAR DEFAULT 'brouillon', signe_parent BOOLEAN, signe_am BOOLEAN, finalise_le TIMESTAMP, cree_le TIMESTAMP DEFAULT now(), modifie_le TIMESTAMP DEFAULT now() ); -- ========================================================== -- Table : avenants_contrats -- ========================================================== CREATE TABLE avenants_contrats ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id_contrat UUID REFERENCES contrats(id) ON DELETE CASCADE, modifications JSONB, initie_par UUID REFERENCES utilisateurs(id), statut VARCHAR DEFAULT 'propose', cree_le TIMESTAMP DEFAULT now(), modifie_le TIMESTAMP DEFAULT now() ); -- ========================================================== -- Table : evenements -- ========================================================== CREATE TABLE evenements ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), type VARCHAR, -- absence_enfant, conge_am, conge_parent, arret_maladie_am, evenement_rpe id_enfant UUID REFERENCES enfants(id) ON DELETE CASCADE, id_am UUID REFERENCES utilisateurs(id), id_parent UUID REFERENCES parents(id_utilisateur), cree_par UUID REFERENCES utilisateurs(id), date_debut DATE, date_fin DATE, commentaires TEXT, statut VARCHAR DEFAULT 'propose', delai_grace DATE, urgent BOOLEAN, cree_le TIMESTAMP DEFAULT now(), modifie_le TIMESTAMP DEFAULT now() ); -- ========================================================== -- Table : signalements_bugs -- ========================================================== CREATE TABLE signalements_bugs ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id_utilisateur UUID REFERENCES utilisateurs(id), description TEXT, cree_le TIMESTAMP 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) ); -- ========================================================== -- Table : uploads -- ========================================================== CREATE TABLE uploads ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE SET NULL, fichier_url TEXT NOT NULL, type VARCHAR, cree_le TIMESTAMP DEFAULT now() ); -- ========================================================== -- Table : notifications -- ========================================================== CREATE TABLE notifications ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id_utilisateur UUID REFERENCES utilisateurs(id) ON DELETE CASCADE, contenu TEXT, lu BOOLEAN DEFAULT false, cree_le TIMESTAMP DEFAULT now() ); -- ========================================================== -- Table : validations -- ========================================================== CREATE TABLE validations ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), id_utilisateur UUID REFERENCES utilisateurs(id), type VARCHAR, statut VARCHAR DEFAULT 'en_attente', cree_le TIMESTAMP DEFAULT now(), modifie_le TIMESTAMP DEFAULT now() );