8d5f73fc9c8bac42223ddc28659ba59b32cd36b4
Thé Tip Top – Backend API
Présentation
Ce projet correspond au backend du jeu-concours organisé par Thé Tip Top à l'occasion de l'ouverture de sa 10ᵉ boutique à Nice.
L'application permet aux clients de participer à un jeu-concours via un code présent sur leur ticket de caisse, de consulter leurs gains et de réclamer leurs lots en boutique.
Le backend expose une API REST sécurisée utilisée par :
- l'application client (participants)
- l'espace employé en boutique
- l'espace administrateur
- les futurs services externes de l'écosystème Thé Tip Top
Fonctionnalités
Authentification
- Inscription utilisateur
- Connexion sécurisée
- Authentification JWT
- Gestion des rôles (CLIENT, EMPLOYEE, ADMIN)
- Hachage des mots de passe avec Bcrypt
- Validation des données avec Zod
Jeu-concours
- Génération automatique des lots
- Génération des tickets gagnants
- Participation via code ticket unique
- Attribution automatique des gains
- Historique des participations
- Historique des gains remportés
Espace Employé
- Recherche d'un gain via un code ticket
- Vérification du statut du gain
- Validation de la remise d'un lot
- Mise à jour automatique du statut du gain
Espace Administrateur
- Tableau de bord statistique
- Liste des participants
- Liste des contacts ayant accepté les communications marketing
- Création de comptes employés
- Tirage au sort du grand gagnant
- Consultation du gagnant du gros lot
Documentation API
- Documentation interactive avec Swagger UI
- Génération automatique de la documentation via Swagger JSDoc
- Tests des endpoints directement depuis le navigateur
Architecture Technique
Backend
- Node.js
- Express.js
Base de données
- PostgreSQL
- Prisma ORM 6
- Prisma Client 6
- Prisma Migrate
- Prisma Studio
Validation des données
- Zod
- Middleware de validation personnalisé
Sécurité
- JWT (JSON Web Token)
- Bcrypt
- Gestion des rôles et permissions
- Validation des entrées utilisateur
Documentation
- Swagger UI
- Swagger JSDoc
- OpenAPI 3.0
Installation
Cloner le projet
bash git clone <url-du-repository> cd the-tip-top-backend
Installer les dépendances
bash npm install
Variables d'environnement
Créer un fichier .env à la racine du projet :
DATABASE_URL="postgresql://postgres:password@localhost:**5432**/the_tip_top_db*
JWT_SECRET=*your_secret_key" ```
---
## Base de données
### Générer les migrations
```bash npx prisma migrate dev ```
### Générer Prisma Client
```bash npx prisma generate ```
### Exécuter le seed de la base
```bash npx prisma db seed ```
### Générer les tickets du jeu-concours
```bash npm run generate:tickets ```
### Ouvrir Prisma Studio
```bash npx prisma studio ```
---
## Technologies utilisées
| Technologie | Version |
| ----------- | ---------------- |
| Node.js | 20+ |
| Express.js | 5 |
| PostgreSQL | 16+ |
| Prisma ORM | 6 |
| JWT | Dernière version |
| Bcrypt | Dernière version |
| Zod | Dernière version |
| Swagger UI | Dernière version |
---
## Lancement du projet
### Développement
```bash npm run dev ```
Serveur :
```txt [http://localhost:**5000**](http://localhost:**5000**) ```
---
## Documentation API
La documentation Swagger est accessible à l'adresse :
```txt [http://localhost:**5000**/api-docs](http://localhost:**5000**/api-docs) ```
Fonctionnalités disponibles :
- Consultation de toutes les routes
- Visualisation des schémas de données
- Test des endpoints
- Authentification via **JWT** avec le bouton **Authorize**
---
## Gestion des rôles
### CLIENT
Peut :
- Participer au jeu-concours
- Consulter ses gains
- Consulter son profil
### EMPLOYEE
Peut :
- Rechercher un gain
- Vérifier les informations du gagnant
- Valider la remise d'un lot
### ADMIN
Peut :
- Accéder aux statistiques
- Créer des employés
- Gérer les campagnes emailing
- Effectuer le tirage au sort final
- Consulter le gagnant du gros lot
---
## Routes API
### Auth
| Méthode | Route |
| ------- | ------------------ |
| POST | /api/auth/register |
| POST | /api/auth/login |
| GET | /api/auth/me |
### Game
| Méthode | Route |
| ------- | --------------------- |
| POST | /api/game/participate |
| GET | /api/game/my-gains |
### Employee
| Méthode | Route |
| ------- | ---------------------------- |
| GET | /api/employee/ticket/ |
| PATCH | /api/employee/claim//deliver |
### Admin
| Méthode | Route |
| ------- | -------------------- |
| GET | /api/admin/stats |
| GET | /api/admin/users |
| GET | /api/admin/emailing |
| POST | /api/admin/employees |
| POST | /api/admin/draw |
| GET | /api/admin/draw |
---
## Validation avec Zod
Toutes les données reçues par l'**API** sont validées avant traitement grâce à **Zod**.
Exemples :
- Inscription utilisateur
- Connexion
- Création d'employés
- Participation au jeu-concours
- Validation des paramètres de requête
Cette approche garantit :
- Des données cohérentes
- Une meilleure sécurité
- Des messages d'erreur explicites
- Une maintenance facilitée
---
## Modèle de données principal
### User
- **CLIENT**
- **EMPLOYEE**
- **ADMIN**
### Ticket
- Code unique
- Gain associé
- Utilisé / Non utilisé
### Lot
- Nom
- Description
- Valeur
- Pourcentage de répartition
### Participation
- Utilisateur
- Ticket
- Lot gagné
### Claim
- **PENDING**
- **DELIVERED**
- **CANCELLED**
### GrandPrizeWinner
- Gagnant du gros lot
- Date du tirage
- Récompense
---
## Prisma ORM 6
Le projet utilise **Prisma **ORM** 6** pour :
- La modélisation des données
- Les migrations de base de données
- Les requêtes **SQL** typées
- La génération automatique du client Prisma
- L'administration de la base via Prisma Studio
Commandes utiles :
```bash npx prisma migrate dev npx prisma generate npx prisma db seed npx prisma studio ```
---
## Règles métier
- Tous les tickets sont gagnants.
- Un ticket ne peut être utilisé qu'une seule fois.
- Les gains sont associés aux tickets dès leur génération.
- Plusieurs participations n'augmentent pas les chances de remporter le gros lot.
- Un seul gagnant du gros lot peut être enregistré.
- Les gains non récupérés dans les délais peuvent être annulés.
---
## Auteur
Projet réalisé dans le cadre de la certification :
**Expert en Stratégie et Transformation Digitale**
Client fictif : **Thé Tip Top**.
Description
Languages
JavaScript
98.7%
Dockerfile
0.7%
HTML
0.6%