# The Tip Top Backend API

API backend pour le jeu-concours The Tip Top.

## Configuration

### Variables d'environnement

Le fichier `.env` contient la configuration de la base de données et de l'application :

```env
DB_HOST=51.75.24.29
DB_PORT=5433
DB_USER=postgres
DB_PASS=postgres
DB_NAME=thetiptop_dev
PORT=4000
JWT_SECRET=thetiptopsecret
SESSION_SECRET=thetiptopsessionsecret
```

**Note** : La base de données PostgreSQL est hébergée sur le serveur distant `51.75.24.29:5433`.

## Installation

```bash
# Installer les dépendances
npm install

# Créer le schéma de la base de données
psql -U postgres -d thetiptop_dev -p 5433 -f database/schema.sql

# Insérer les données de test
npm run db:seed
```

## Démarrage

### Démarrage normal

```bash
npm start
```

### Démarrage en mode développement (avec nodemon)

```bash
npm run dev
```

### Arrêter le serveur

**Sur Windows :**
1. Ouvrez le Gestionnaire des tâches (Ctrl + Shift + Esc)
2. Cherchez les processus "Node.js"
3. Terminez-les tous

**Ou via PowerShell :**
```powershell
Get-Process node | Stop-Process -Force
```

## Structure du projet

```
the-tip-top-backend/
├── database/
│   ├── schema.sql          # Schéma de la base de données
│   ├── seed.js             # Script de seed
│   └── README.md           # Documentation DB
├── src/
│   ├── config/
│   │   └── env.js          # Configuration environnement
│   ├── controllers/        # Contrôleurs (logique métier)
│   ├── middleware/         # Middlewares (auth, validation, erreurs)
│   ├── routes/             # Définition des routes
│   ├── services/           # Services (email, etc.)
│   ├── utils/              # Utilitaires
│   └── validations/        # Schémas de validation Zod
├── db.js                   # Configuration PostgreSQL
├── index.js                # Point d'entrée de l'application
└── .env                    # Variables d'environnement
```

## Routes API

### Authentification (`/api/auth`)
- `POST /register` - Inscription
- `POST /login` - Connexion
- `GET /verify-email/:token` - Vérification email
- `POST /forgot-password` - Demande de réinitialisation
- `POST /reset-password` - Réinitialisation du mot de passe

### Utilisateur (`/api/users`)
- `GET /profile` - Récupérer le profil
- `PUT /profile` - Mettre à jour le profil
- `POST /change-password` - Changer le mot de passe

### Jeu (`/api/game`)
- `POST /play` - Jouer et obtenir un ticket
- `GET /my-tickets` - Mes tickets
- `GET /ticket/:code` - Détails d'un ticket

### Employé (`/api/employee`)
- `POST /validate-ticket` - Valider un ticket
- `GET /pending-tickets` - Tickets en attente

### Admin (`/api/admin`)
- `GET /statistics` - Statistiques globales
- `GET /prizes` - Liste des prix
- `POST /prizes` - Créer un prix
- `PUT /prizes/:id` - Modifier un prix
- `DELETE /prizes/:id` - Supprimer un prix
- `GET /users` - Liste des utilisateurs
- `POST /employees` - Créer un employé
- `PUT /users/:id` - Modifier un utilisateur
- `DELETE /users/:id` - Supprimer un utilisateur
- `GET /tickets` - Liste des tickets

## Comptes de test

Après avoir exécuté le seed :

| 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-5@example.com | Client123! | CLIENT |

## Tests

```bash
# Tests unitaires
npm test

# Tests d'intégration
npm run test:integration
```

## Endpoints de monitoring

- `GET /` - Health check
- `GET /db-check` - Vérification connexion DB
- `GET /metrics` - Métriques Prometheus

## Technologies

- **Express** - Framework web
- **PostgreSQL** - Base de données
- **JWT** - Authentification
- **Bcrypt** - Hashage de mots de passe
- **Zod** - Validation des données
- **Nodemailer** - Envoi d'emails
- **Helmet** - Sécurité HTTP
- **CORS** - Gestion des origines
- **Morgan** - Logs HTTP
- **Prometheus** - Métriques
