# 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