# Database Setup Ce dossier contient le schéma SQL et le script de seed pour la base de données PostgreSQL. ## Structure - `schema.sql` - Schéma complet de la base de données (tables, index, triggers, vues) - `seed.js` - Script pour insérer des données de test ## Installation ### 1. Créer le schéma Exécutez le fichier SQL pour créer toutes les tables et insérer les données initiales (prix, configuration du jeu) : ```bash psql -U postgres -d thetiptop -f database/schema.sql ``` Ou utilisez le script npm : ```bash npm run db:schema ``` ### 2. Insérer les données de test Exécutez le script de seed pour créer des utilisateurs et tickets de test : ```bash npm run db:seed ``` ## Données de test créées Le script de seed crée : ### Utilisateurs | Email | Mot de passe | Rôle | |-------|-------------|------| | admin@thetiptop.com | Admin123! | ADMIN | | employee1@thetiptop.com | Employee123! | EMPLOYEE | | employee2@thetiptop.com | Employee123! | EMPLOYEE | | client1@example.com | Client123! | CLIENT | | client2@example.com | Client123! | CLIENT | | client3@example.com | Client123! | CLIENT | | client4@example.com | Client123! | CLIENT | | client5@example.com | Client123! | CLIENT | ### Tickets - Environ 15-25 tickets répartis entre les clients - 80% en statut PENDING - 10% en statut CLAIMED - 10% en statut REJECTED - Prix distribués aléatoirement ## Schéma de la base de données ### Tables principales #### users Stocke tous les utilisateurs (clients, employés, admins) - Authentification par email/password - Vérification par email - Récupération de mot de passe #### prizes Les différents prix disponibles dans le jeu-concours - 5 types de prix (INFUSEUR, THE_SIGNATURE, COFFRET_DECOUVERTE, COFFRET_PRESTIGE, THE_GRATUIT) - Stock et probabilités configurables - Gestion du statut actif/inactif #### tickets Les tickets de jeu générés pour chaque participation - Code unique - Statuts: PENDING, CLAIMED, REJECTED - Lié à un utilisateur et un prix - Traçabilité de la validation #### game_settings Configuration générale du jeu-concours - Dates de début et fin - Nombre total de tickets - Statut actif/inactif ### Vues utiles #### prize_statistics Statistiques agrégées par prix (stock initial, utilisé, restant, etc.) #### pending_tickets Liste des tickets en attente de validation avec toutes les informations nécessaires ## Réinitialisation Pour réinitialiser complètement la base de données : ```bash # 1. Supprimer et recréer le schéma npm run db:schema # 2. Insérer les données de test npm run db:seed ``` ## Notes - Le schéma utilise des UUID pour tous les IDs - Les triggers mettent automatiquement à jour les champs `updated_at` - Les index sont créés sur les colonnes fréquemment utilisées pour optimiser les performances - Les contraintes CASCADE assurent l'intégrité référentielle