160 lines
4.0 KiB
Markdown
160 lines
4.0 KiB
Markdown
# 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
|