From 3892a8beab11469c672d2404549cf3ff11f91116 Mon Sep 17 00:00:00 2001 From: Julien Martin Date: Mon, 16 Feb 2026 17:27:26 +0100 Subject: [PATCH] =?UTF-8?q?feat(#92):=20seed=20donn=C3=A9es=20de=20test=20?= =?UTF-8?q?dashboard=20admin=20+=20script=20reset=20BDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- database/seed/03_seed_test_data.sql | 73 +++++++++++++++++++++++++++++ scripts/reset-and-seed-db.sh | 61 ++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 database/seed/03_seed_test_data.sql create mode 100755 scripts/reset-and-seed-db.sh diff --git a/database/seed/03_seed_test_data.sql b/database/seed/03_seed_test_data.sql new file mode 100644 index 0000000..1aa805f --- /dev/null +++ b/database/seed/03_seed_test_data.sql @@ -0,0 +1,73 @@ +-- ============================================================ +-- 03_seed_test_data.sql : Données de test complètes (dashboard admin) +-- Aligné sur utilisateurs-test-complet.json +-- Mot de passe universel : password (bcrypt) +-- À exécuter après BDD.sql (init DB) +-- ============================================================ + +BEGIN; + +-- Hash bcrypt pour "password" (10 rounds) + +-- ========== UTILISATEURS (1 admin + 1 gestionnaire + 2 AM + 5 parents) ========== +-- On garde admin@ptits-pas.fr (super_admin) déjà créé par BDD.sql + +INSERT INTO utilisateurs (id, email, password, prenom, nom, role, statut, telephone, adresse, ville, code_postal, profession, situation_familiale, date_naissance, consentement_photo) +VALUES + ('a0000001-0001-0001-0001-000000000001', 'sophie.bernard@ptits-pas.fr', '$2b$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW', 'Sophie', 'BERNARD', 'administrateur', 'actif', '0678123456', '12 Avenue Gabriel Péri', 'Bezons', '95870', 'Responsable administrative', 'marie', '1978-03-15', false), + ('a0000002-0002-0002-0002-000000000002', 'lucas.moreau@ptits-pas.fr', '$2b$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW', 'Lucas', 'MOREAU', 'gestionnaire', 'actif', '0687234567', '8 Rue Jean Jaurès', 'Bezons', '95870', 'Gestionnaire des placements', 'celibataire', '1985-09-22', false), + ('a0000003-0003-0003-0003-000000000003', 'marie.dubois@ptits-pas.fr', '$2b$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW', 'Marie', 'DUBOIS', 'assistante_maternelle', 'actif', '0696345678', '25 Rue de la République', 'Bezons', '95870', 'Assistante maternelle', 'marie', '1980-06-08', true), + ('a0000004-0004-0004-0004-000000000004', 'fatima.elmansouri@ptits-pas.fr', '$2b$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW', 'Fatima', 'EL MANSOURI', 'assistante_maternelle', 'actif', '0675456789', '17 Boulevard Aristide Briand', 'Bezons', '95870', 'Assistante maternelle', 'marie', '1975-11-12', true), + ('a0000005-0005-0005-0005-000000000005', 'claire.martin@ptits-pas.fr', '$2b$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW', 'Claire', 'MARTIN', 'parent', 'actif', '0689567890', '5 Avenue du Général de Gaulle', 'Bezons', '95870', 'Infirmière', 'marie', '1990-04-03', false), + ('a0000006-0006-0006-0006-000000000006', 'thomas.martin@ptits-pas.fr', '$2b$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW', 'Thomas', 'MARTIN', 'parent', 'actif', '0678456789', '5 Avenue du Général de Gaulle', 'Bezons', '95870', 'Ingénieur', 'marie', '1988-07-18', false), + ('a0000007-0007-0007-0007-000000000007', 'amelie.durand@ptits-pas.fr', '$2b$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW', 'Amélie', 'DURAND', 'parent', 'actif', '0667788990', '23 Rue Victor Hugo', 'Bezons', '95870', 'Comptable', 'divorce', '1987-12-14', false), + ('a0000008-0008-0008-0008-000000000008', 'julien.rousseau@ptits-pas.fr', '$2b$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW', 'Julien', 'ROUSSEAU', 'parent', 'actif', '0656677889', '14 Rue Pasteur', 'Bezons', '95870', 'Commercial', 'divorce', '1985-08-29', false), + ('a0000009-0009-0009-0009-000000000009', 'david.lecomte@ptits-pas.fr', '$2b$10$EixZaYVK1fsbw1ZfbX3OXePaWxn96p36WQoeG6Lruj3vjPGga31lW', 'David', 'LECOMTE', 'parent', 'actif', '0645566778', '31 Rue Émile Zola', 'Bezons', '95870', 'Développeur web', 'parent_isole', '1992-10-07', false) +ON CONFLICT (email) DO NOTHING; + +-- ========== PARENTS (avec co-parent pour le couple Martin) ========== +INSERT INTO parents (id_utilisateur, id_co_parent) +VALUES + ('a0000005-0005-0005-0005-000000000005', 'a0000006-0006-0006-0006-000000000006'), + ('a0000006-0006-0006-0006-000000000006', 'a0000005-0005-0005-0005-000000000005'), + ('a0000007-0007-0007-0007-000000000007', NULL), + ('a0000008-0008-0008-0008-000000000008', NULL), + ('a0000009-0009-0009-0009-000000000009', NULL) +ON CONFLICT (id_utilisateur) DO NOTHING; + +-- ========== ASSISTANTES MATERNELLES ========== +INSERT INTO assistantes_maternelles (id_utilisateur, numero_agrement, nir_chiffre, nb_max_enfants, biographie, date_agrement, ville_residence, disponible, place_disponible) +VALUES + ('a0000003-0003-0003-0003-000000000003', 'AGR-2019-095001', '280069512345671', 4, 'Assistante maternelle agréée depuis 2019. Spécialité bébés 0-18 mois. Accueil bienveillant et cadre sécurisant. 2 places disponibles.', '2019-09-01', 'Bezons', true, 2), + ('a0000004-0004-0004-0004-000000000004', 'AGR-2017-095002', '275119512345672', 3, 'Assistante maternelle expérimentée. Spécialité 1-3 ans. Accueil à la journée. 1 place disponible.', '2017-06-15', 'Bezons', true, 1) +ON CONFLICT (id_utilisateur) DO NOTHING; + +-- ========== ENFANTS ========== +INSERT INTO enfants (id, prenom, nom, genre, date_naissance, statut, est_multiple) +VALUES + ('e0000001-0001-0001-0001-000000000001', 'Emma', 'MARTIN', 'F', '2023-02-15', 'actif', true), + ('e0000002-0002-0002-0002-000000000002', 'Noah', 'MARTIN', 'H', '2023-02-15', 'actif', true), + ('e0000003-0003-0003-0003-000000000003', 'Léa', 'MARTIN', 'F', '2023-02-15', 'actif', true), + ('e0000004-0004-0004-0004-000000000004', 'Chloé', 'ROUSSEAU', 'F', '2022-04-20', 'actif', false), + ('e0000005-0005-0005-0005-000000000005', 'Hugo', 'ROUSSEAU', 'H', '2024-03-10', 'actif', false), + ('e0000006-0006-0006-0006-000000000006', 'Maxime', 'LECOMTE', 'H', '2023-04-15', 'actif', false) +ON CONFLICT (id) DO NOTHING; + +-- ========== ENFANTS_PARENTS (liaison N:N) ========== +-- Martin (Claire + Thomas) -> Emma, Noah, Léa +INSERT INTO enfants_parents (id_parent, id_enfant) +VALUES + ('a0000005-0005-0005-0005-000000000005', 'e0000001-0001-0001-0001-000000000001'), + ('a0000005-0005-0005-0005-000000000005', 'e0000002-0002-0002-0002-000000000002'), + ('a0000005-0005-0005-0005-000000000005', 'e0000003-0003-0003-0003-000000000003'), + ('a0000006-0006-0006-0006-000000000006', 'e0000001-0001-0001-0001-000000000001'), + ('a0000006-0006-0006-0006-000000000006', 'e0000002-0002-0002-0002-000000000002'), + ('a0000006-0006-0006-0006-000000000006', 'e0000003-0003-0003-0003-000000000003'), + ('a0000007-0007-0007-0007-000000000007', 'e0000004-0004-0004-0004-000000000004'), + ('a0000007-0007-0007-0007-000000000007', 'e0000005-0005-0005-0005-000000000005'), + ('a0000008-0008-0008-0008-000000000008', 'e0000004-0004-0004-0004-000000000004'), + ('a0000008-0008-0008-0008-000000000008', 'e0000005-0005-0005-0005-000000000005'), + ('a0000009-0009-0009-0009-000000000009', 'e0000006-0006-0006-0006-000000000006') +ON CONFLICT DO NOTHING; + +COMMIT; diff --git a/scripts/reset-and-seed-db.sh b/scripts/reset-and-seed-db.sh new file mode 100755 index 0000000..1bbea91 --- /dev/null +++ b/scripts/reset-and-seed-db.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +# ============================================================ +# reset-and-seed-db.sh : Réinitialise la BDD et injecte les données de test +# Usage : depuis la racine du projet ptitspas-app +# ./scripts/reset-and-seed-db.sh +# ============================================================ + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +cd "$PROJECT_ROOT" + +echo "=== Réinitialisation BDD + seed données de test ===" +echo "Projet : $PROJECT_ROOT" +echo "" + +# 1) Arrêter les conteneurs et supprimer le volume Postgres +echo "[1/4] Arrêt des conteneurs et suppression du volume Postgres..." +docker compose down -v 2>/dev/null || docker-compose down -v 2>/dev/null || true + +# 2) Démarrer uniquement la base +echo "[2/4] Démarrage du conteneur database..." +docker compose up -d database 2>/dev/null || docker-compose up -d database 2>/dev/null + +# 3) Attendre que Postgres soit prêt +echo "[3/4] Attente du démarrage de Postgres..." +for i in {1..30}; do + if docker exec ptitspas-postgres pg_isready -U admin -d ptitpas_db 2>/dev/null; then + echo " Postgres prêt." + break + fi + if [ "$i" -eq 30 ]; then + echo "Erreur : Postgres ne répond pas après 30 tentatives." + exit 1 + fi + sleep 1 +done + +# Petit délai supplémentaire pour la fin de l'init (BDD.sql) +sleep 2 + +# 4) Exécuter le seed des données de test +echo "[4/4] Exécution du seed (03_seed_test_data.sql)..." +docker exec -i ptitspas-postgres psql -U admin -d ptitpas_db < database/seed/03_seed_test_data.sql + +echo "" +echo "=== Terminé ===" +echo "Comptes de test (mot de passe : password) :" +echo " - admin@ptits-pas.fr (super_admin, créé par BDD.sql)" +echo " - sophie.bernard@ptits-pas.fr (administrateur)" +echo " - lucas.moreau@ptits-pas.fr (gestionnaire)" +echo " - marie.dubois@ptits-pas.fr (assistante maternelle)" +echo " - fatima.elmansouri@ptits-pas.fr (assistante maternelle)" +echo " - claire.martin@ptits-pas.fr (parent)" +echo " - thomas.martin@ptits-pas.fr (parent)" +echo " - amelie.durand@ptits-pas.fr (parent)" +echo " - julien.rousseau@ptits-pas.fr (parent)" +echo " - david.lecomte@ptits-pas.fr (parent)" +echo "" +echo "Tu peux redémarrer le backend/frontend si besoin : docker compose up -d"