114 lines
2.8 KiB
Markdown
114 lines
2.8 KiB
Markdown
# 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
|