# 🍵 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 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.