# 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
