Files
THE-TIP-TOP/frontend/README.md
2026-08-21 02:32:55 +02:00

276 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Thé Tip Top – Frontend
## Présentation
Frontend React du jeu-concours fictif **Thé Tip Top**, réalisé dans le cadre de la certification **Expert en Stratégie et Transformation Digitale**.
L’interface communique avec l’API backend et propose des parcours adaptés aux visiteurs, clients, employés et administrateurs.
## Stack technique
| Technologie | Utilisation |
|---|---|
| React | Interface utilisateur |
| Vite | Développement et build |
| React Router | Navigation |
| Tailwind CSS | Interface responsive |
| Vitest | Tests |
| Testing Library | Tests fonctionnels |
| ESLint | Analyse statique |
| Nginx | Serveur web du conteneur |
| Docker | Conteneurisation |
## Fonctionnalités
### Visiteur
- accueil ;
- règles du jeu ;
- inscription ;
- connexion ;
- connexion Google ;
- pages légales et confidentialité ;
- CGU et accessibilité ;
- contact ;
- plan du site.
### Client
- profil ;
- saisie d’un code unique ;
- participation ;
- consultation des gains ;
- gestion de session.
### Employé
- recherche d’un gain ;
- vérification d’un ticket ;
- validation de la remise d’un lot.
### Administrateur
- statistiques ;
- gestion administrative ;
- création d’employés ;
- configuration du jeu ;
- tirage au sort ;
- consultation du grand gagnant.
## Authentification
Le frontend prend en charge l’authentification email/mot de passe, la vérification email, le JWT, les routes protégées et Google OAuth 2.0.
Flux OAuth :
```text
Frontend
↓
/api/auth/google
↓
Google
↓
Callback backend
↓
/auth/callback frontend
↓
JWT + utilisateur
↓
Redirection selon le rôle
```
## Rôles
- `CLIENT`
- `EMPLOYEE`
- `ADMIN`
Les protections frontend améliorent l’expérience utilisateur ; les autorisations sensibles restent également contrôlées côté backend.
## Configuration API
Le frontend utilise :
```env
VITE_API_URL=http://localhost:5000
```
Les services utilisent cette URL pour les routes `/api/auth`, `/api/game`, `/api/employee` et `/api/admin`.
Dans Jenkins, `VITE_API_URL` est injectée au moment du build Docker selon l’environnement cible.
## Installation locale
Prérequis : Node.js 22 et npm.
```bash
npm install
```
Puis, si nécessaire :
```env
VITE_API_URL=http://localhost:5000
```
## Développement
```bash
npm run dev
```
L’application Vite est généralement disponible sur `http://localhost:5173`.
## Qualité et tests
Lint :
```bash
npm run lint
```
Tests :
```bash
npm test -- --run
```
Build :
```bash
npm run build
```
Les tests couvrent notamment la connexion, l’inscription, la saisie de code, les routes protégées, le contexte d’authentification, les services et la bannière de cookies.
## Docker
Le frontend utilise un build multi-stage :
```text
Node.js
↓
npm ci
↓
Vite build
↓
dist/
↓
Nginx
```
## CI/CD
```text
feature/* → CI uniquement
develop → DEV automatique
release-* → PREPROD automatique
main → validation manuelle → PROD
```
Pour le frontend, Jenkins exécute notamment :
1. `npm ci` ;
2. `npm run lint` ;
3. `npm run build` ;
4. Docker build ;
5. publication dans le Registry ;
6. déploiement dans l’environnement cible.
## Environnements
| Environnement | Frontend | API |
|---|---|---|
| DEV | `https://dev.dsp5-archi-o24a-4-5-g4.fr` | `https://api-dev.dsp5-archi-o24a-4-5-g4.fr` |
| PREPROD | `https://preprod.dsp5-archi-o24a-4-5-g4.fr` | `https://api-preprod.dsp5-archi-o24a-4-5-g4.fr` |
| PROD | `https://dsp5-archi-o24a-4-5-g4.fr` | `https://api.dsp5-archi-o24a-4-5-g4.fr` |
## Architecture applicative
```text
Navigateur
↓ HTTPS
Traefik
↓
Nginx / React
↓
API Express
↓
PostgreSQL
```
Le frontend n’accède jamais directement à PostgreSQL.
## Pages principales
Le projet comprend notamment les pages suivantes :
- accueil ;
- inscription ;
- connexion ;
- callback OAuth ;
- définition du mot de passe ;
- saisie du code unique ;
- gains ;
- profil ;
- espace employé ;
- espace administrateur ;
- règles du jeu ;
- contact ;
- mentions légales ;
- confidentialité ;
- CGU ;
- accessibilité ;
- plan du site ;
- page 404.
## Sécurité
- routes protégées ;
- gestion centralisée de l’authentification ;
- traitement des erreurs 401 ;
- redirection selon le rôle ;
- HTTPS sur les environnements déployés ;
- aucun secret OAuth privé dans le frontend.
> Le `GOOGLE_CLIENT_SECRET`, le secret JWT, les identifiants SMTP et les mots de passe de base de données ne doivent jamais être exposés dans le frontend.
## Arborescence simplifiée
```text
frontend/
├── src/
│ ├── components/
│ ├── context/
│ ├── pages/
│ ├── services/
│ ├── test/
│ └── App.jsx
├── Dockerfile
├── nginx.conf
├── package.json
└── README.md
```
## Infrastructure globale
```text
Développeur
↓
Gitea
↓
Jenkins
↓
Tests + Lint + Build
↓
Docker Registry
↓
DEV / PREPROD / PROD
↓
Traefik + HTTPS
```
Supervision : Prometheus, Grafana, cAdvisor et Node Exporter.
## Projet
Projet étudiant fictif réalisé dans le cadre de la certification **Expert en Stratégie et Transformation Digitale**.
Client fictif : **Thé Tip Top**.