the-tip-top-frontend/README.md
soufiane d9d12727e1 docs: add comprehensive OAuth configuration guide and update Dockerfile
- Add detailed OAuth setup instructions for Google and Facebook in README
- Include step-by-step guides with console URLs and configuration details
- Document required environment variables for OAuth
- Add deployment instructions with Docker build args
- Update Dockerfile to accept OAuth credentials as build arguments
- Support NEXT_PUBLIC_GOOGLE_CLIENT_ID and NEXT_PUBLIC_FACEBOOK_APP_ID

This enables OAuth authentication while keeping it optional for deployments.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-18 03:04:40 +01:00

322 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🍵 Thé Tip Top - Jeu Concours Frontend
Application web moderne pour le jeu-concours "Thé Tip Top" avec Next.js 14 et Tailwind CSS.
## 📋 Description
Site web complet permettant aux utilisateurs de :
- Se connecter via Google/Facebook OAuth ou formulaire classique
- Participer au jeu-concours en entrant un code de ticket (10 caractères)
- Consulter leurs gains et historiques
- Permettre aux employés de vérifier les gains et marquer comme "remis"
- Permettre aux administrateurs de visualiser les statistiques globales du jeu
## 🚀 Technologies utilisées
- **Framework:** Next.js 14 (App Router)
- **Styling:** Tailwind CSS
- **Gestion d'état:** React Context API (AuthContext)
- **Formulaires:** React Hook Form + Zod
- **Notifications:** React Hot Toast
- **Appels API:** Axios
- **Language:** TypeScript
## 📁 Structure du projet
```
the-tip-top-frontend/
├── app/ # Pages Next.js 14 (App Router)
│ ├── page.tsx # Page d'accueil
│ ├── login/page.tsx # Connexion
│ ├── register/page.tsx # Inscription
│ ├── jeux/page.tsx # Page de jeu
│ ├── client/page.tsx # Dashboard client
│ ├── employe/page.tsx # Dashboard employé
│ ├── admin/page.tsx # Dashboard admin
│ ├── historique/page.tsx # Historique
│ ├── profile/page.tsx # Profil
│ ├── layout.tsx # Layout principal
│ └── globals.css # Styles globaux
├── components/ # Composants réutilisables
│ ├── Header.tsx # Header avec navigation
│ ├── Footer.tsx # Footer complet
│ ├── Button.tsx # Bouton personnalisé
│ └── ui/ # Composants UI
│ ├── Card.tsx
│ ├── Input.tsx
│ ├── Badge.tsx
│ ├── Modal.tsx
│ ├── Loading.tsx
│ └── Table.tsx
├── contexts/ # Contextes React
│ └── AuthContext.tsx # Authentification
├── services/ # Services API
│ ├── api.ts # Configuration Axios
│ ├── auth.service.ts # Auth
│ ├── user.service.ts # Utilisateur
│ ├── game.service.ts # Jeu
│ ├── employee.service.ts # Employé
│ └── admin.service.ts # Admin
├── hooks/ # Hooks personnalisés
│ └── useGame.ts
├── lib/ # Librairies
│ └── validations.ts # Schémas Zod
├── types/ # Types TypeScript
│ └── index.ts
└── utils/ # Utilitaires
├── constants.ts # Constantes
└── helpers.ts # Helpers
```
## 🎨 Fonctionnalités
### Pages publiques
-**Page d'accueil** : Présentation du jeu-concours
-**Connexion/Inscription** : Authentification complète avec OAuth
-**Navigation responsive** : Header et Footer professionnels
### Espace Client (`/client`)
- ✅ Statistiques personnelles (participations, gains, en attente)
- ✅ Historique des tickets joués
- ✅ Accès rapide au jeu
### Page de jeu (`/jeux`)
- ✅ Saisie de code ticket avec validation
- ✅ Résultat instantané avec modal
- ✅ Protection : utilisateurs connectés uniquement
### Espace Employé (`/employe`)
- ✅ Recherche de ticket par code
- ✅ Liste des tickets en attente
- ✅ Validation des gains
- ✅ Protection : rôle "employee" requis
### Espace Admin (`/admin`)
- ✅ Statistiques globales du jeu
- ✅ Distribution des lots
- ✅ Aperçu des statuts
- ✅ Derniers utilisateurs et tickets
- ✅ Protection : rôle "admin" requis
## ⚙️ Installation
1. **Cloner le projet**
```bash
git clone <repo-url>
cd the-tip-top-frontend
```
2. **Installer les dépendances**
```bash
npm install
```
3. **Configurer les variables d'environnement**
Créer un fichier `.env.local` :
```env
# API Configuration
NEXT_PUBLIC_API_URL=http://localhost:4000/api
NEXT_PUBLIC_FRONTEND_URL=http://localhost:3000
# NextAuth
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your-secret-key
# OAuth Providers (Optionnel - voir section OAuth ci-dessous)
NEXT_PUBLIC_GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
NEXT_PUBLIC_FACEBOOK_APP_ID=your-facebook-app-id
FACEBOOK_CLIENT_SECRET=your-facebook-client-secret
```
4. **Lancer le serveur de développement**
```bash
npm run dev
```
Le site sera accessible sur **http://localhost:3000**
## 🔐 Configuration OAuth (Optionnel)
L'application supporte l'authentification via Google et Facebook OAuth. Ces fonctionnalités sont **optionnelles** - l'application fonctionne sans OAuth configuré.
### Google OAuth
1. **Créer un projet Google Cloud**
- Aller sur [Google Cloud Console](https://console.cloud.google.com/)
- Créer un nouveau projet ou sélectionner un existant
2. **Activer l'API Google+**
- APIs & Services → Library
- Rechercher "Google+ API" → Enable
3. **Créer des identifiants OAuth 2.0**
- APIs & Services → Credentials
- Create Credentials → OAuth client ID
- Type d'application: **Application Web**
4. **Configurer les origines autorisées**
- **Origines JavaScript autorisées:**
- `https://dev.dsp5-archi-o24a-15m-g3.fr` (production DEV)
- `http://localhost:3000` (développement local)
- **URI de redirection autorisés:**
- `https://dev.dsp5-archi-o24a-15m-g3.fr`
- `http://localhost:3000`
5. **Copier le Client ID** et l'ajouter à vos variables d'environnement
### Facebook OAuth
1. **Créer une application Facebook**
- Aller sur [Facebook Developers](https://developers.facebook.com/)
- Mes Apps → Créer une app → Type: **Consommateur**
2. **Configurer Facebook Login**
- Ajouter un produit → Facebook Login → Configurer
- Paramètres → Facebook Login
3. **Configurer les URI de redirection**
- **URI de redirection OAuth valides:**
- `https://dev.dsp5-archi-o24a-15m-g3.fr`
- `http://localhost:3000`
4. **Paramètres de base**
- Domaines de l'app: `dev.dsp5-archi-o24a-15m-g3.fr`
- URL de la politique de confidentialité: (requis pour mise en production)
- URL des conditions de service: (requis pour mise en production)
5. **Copier l'ID de l'app** et l'ajouter à vos variables d'environnement
6. **Rendre l'app publique**
- Mode développement: seuls les testeurs peuvent se connecter
- Mode production: tout le monde peut se connecter (nécessite validation Facebook)
### Variables d'environnement pour OAuth
```env
# Google OAuth
NEXT_PUBLIC_GOOGLE_CLIENT_ID=votre-client-id-google.apps.googleusercontent.com
# Facebook OAuth
NEXT_PUBLIC_FACEBOOK_APP_ID=votre-facebook-app-id
```
### Déploiement avec OAuth
Pour le déploiement via Jenkins, les variables d'environnement doivent être passées lors du build Docker:
```bash
docker build \
--build-arg NEXT_PUBLIC_API_URL=https://api.dev.dsp5-archi-o24a-15m-g3.fr/api \
--build-arg NEXT_PUBLIC_FRONTEND_URL=https://dev.dsp5-archi-o24a-15m-g3.fr \
--build-arg NEXT_PUBLIC_GOOGLE_CLIENT_ID=votre-client-id \
--build-arg NEXT_PUBLIC_FACEBOOK_APP_ID=votre-app-id \
-t the-tip-top-frontend .
```
**Note:** Si OAuth n'est pas configuré, les boutons de connexion Google/Facebook ne s'afficheront pas sur la page de login.
## 🔗 Routes principales
| Route | Description | Protection |
|-------|-------------|-----------|
| `/` | Page d'accueil | Publique |
| `/login` | Connexion | Publique |
| `/register` | Inscription | Publique |
| `/jeux` | Participer au jeu | Authentifié |
| `/client` | Dashboard client | Client |
| `/employe` | Dashboard employé | Employé |
| `/admin` | Dashboard admin | Admin |
| `/historique` | Historique | Authentifié |
| `/profile` | Profil utilisateur | Authentifié |
## 🎯 Backend requis
Le frontend se connecte à un backend Express sur `http://localhost:5000` (configurable).
### Endpoints attendus :
**Authentification**
- `POST /api/auth/login`
- `POST /api/auth/register`
- `POST /api/auth/google`
- `POST /api/auth/facebook`
- `GET /api/auth/me`
- `POST /api/auth/logout`
**Jeu**
- `POST /api/game/play`
**Utilisateur**
- `GET /api/user/tickets`
- `GET /api/user/profile`
**Employé**
- `GET /api/employee/pending-tickets`
- `POST /api/employee/validate/:id`
**Admin**
- `GET /api/admin/statistics`
- `GET /api/admin/users`
- `GET /api/admin/tickets`
## 🏗️ Build de production
```bash
# Créer le build
npm run build
# Démarrer en production
npm start
```
## 🎨 Thème et design
Le projet utilise un thème personnalisé avec Tailwind CSS :
- **Couleur primaire** : Vert (thème du thé)
- **Couleur secondaire** : Jaune/Or
- **Design** : Moderne, responsive, accessible
- **Composants** : Réutilisables et modulaires
## 📱 Responsive
L'application est entièrement responsive :
- 📱 Mobile : < 768px
- 💻 Tablet : 768px - 1024px
- 🖥 Desktop : > 1024px
## ♿ Accessibilité
- Labels ARIA sur tous les éléments interactifs
- Navigation au clavier
- Contrastes de couleurs respectés
- Messages d'erreur descriptifs
## 🧪 Scripts disponibles
```bash
npm run dev # Développement
npm run build # Build production
npm start # Démarrer en production
npm run lint # Linter
```
## 📄 License
Ce projet est sous licence privée - Thé Tip Top © 2024
## 👥 Auteur
Développé pour Thé Tip Top - Jeu Concours 2024
---
**Note:** Assurez-vous que le backend est démarré avant de lancer le frontend.