Go to file
soufiane a80d42271d fix: replace vulnerable email regex with safe helper function
- Use isValidEmail from helpers instead of inline regex
- Fixes SonarQube Security Hotspot for DoS via backtracking

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 14:44:51 +01:00
__tests__ fix: update tests to match new color palette 2025-12-05 11:27:40 +01:00
app fix: replace vulnerable email regex with safe helper function 2025-12-05 14:44:51 +01:00
components fix: simplify mobile navigation 2025-12-05 14:08:17 +01:00
contexts perf: use cached user data for faster login redirect 2025-12-03 21:20:43 +01:00
docs fix: improve Facebook login error handling and add setup documentation 2025-11-19 15:44:21 +01:00
hooks refactor: extract UserDropdown component and useClickOutside hook 2025-12-01 17:44:16 +01:00
lib feat: add Prometheus HTTP metrics for frontend 2025-11-26 13:42:03 +01:00
public feat: add prize and contest images 2025-11-24 01:44:40 +01:00
scripts dev 2025-11-17 23:38:02 +01:00
services feat: redesign admin panel with blanc cassé theme 2025-12-03 19:43:14 +01:00
types feat: add active/inactive clients statistics to admin dashboard 2025-12-05 11:49:06 +01:00
utils feat: update color palette to WCAG AA compliant green theme 2025-12-05 11:18:19 +01:00
.dockerignore Initial commit du frontend The Tip Top 2025-10-30 11:11:59 +00:00
.env config: add reCAPTCHA keys 2025-12-02 16:51:55 +01:00
.env.dev config: add reCAPTCHA keys 2025-12-02 16:51:55 +01:00
.env.example feat: add Google and Facebook OAuth configuration 2025-11-18 20:26:23 +01:00
.env.preprod config: add reCAPTCHA keys 2025-12-02 16:51:55 +01:00
.env.production config: add reCAPTCHA keys 2025-12-02 16:51:55 +01:00
.eslintrc.json fix: resolve ESLint errors and React Hooks violations 2025-11-18 15:56:10 +01:00
.gitignore feat: add Google and Facebook OAuth configuration 2025-11-18 20:26:23 +01:00
.sonarignore feat: add SonarQube integration, cookie consent, and authentication improvements 2025-11-21 01:23:50 +01:00
Dockerfile fix: ensure Next.js build completes successfully in Dockerfile 2025-11-24 01:13:38 +01:00
instrumentation.ts feat: add Prometheus HTTP metrics for frontend 2025-11-26 13:42:03 +01:00
JENKINS_AUTO_TRIGGER_SETUP.md fix: simplify Jenkins triggers to use only pollSCM + add setup docs 2025-11-18 16:08:19 +01:00
JENKINS_WEBHOOK_SETUP.md feat: add automatic deployment triggers to Jenkinsfile 2025-11-18 15:19:02 +01:00
Jenkinsfile fix: reorder stages - SonarQube (quality) before Tests 2025-12-02 00:58:35 +01:00
jest.config.js fix: add hooks, contexts, lib to jest coverage collection 2025-12-01 23:05:52 +01:00
jest.setup.js fix: resolve ESLint warning and silence test console output 2025-12-01 16:19:27 +01:00
middleware.ts feat: add Prometheus HTTP metrics for frontend 2025-11-26 13:42:03 +01:00
next.config.js feat: add Prometheus HTTP metrics for frontend 2025-11-26 13:42:03 +01:00
package-lock.json feat: add reCAPTCHA, reset-password, sort tickets, update dates 2025-12-02 16:35:19 +01:00
package.json feat: add reCAPTCHA, reset-password, sort tickets, update dates 2025-12-02 16:35:19 +01:00
postcss.config.js dev 2025-11-17 23:38:02 +01:00
README.md docs: add comprehensive OAuth configuration guide and update Dockerfile 2025-11-18 03:04:40 +01:00
sonar-project.properties fix: improve test coverage and SonarQube configuration 2025-11-27 14:18:30 +01:00
tailwind.config.js feat: update color palette to WCAG AA compliant green theme 2025-12-05 11:18:19 +01:00
test-api.sh dev 2025-11-17 23:38:02 +01:00
tsconfig.json Initial commit du frontend The Tip Top 2025-10-30 11:11:59 +00:00
tsconfig.sonar.json fix: resolve SonarQube and Next.js warnings 2025-11-27 12:46:07 +01:00
update-token.html dev 2025-11-17 23:38:02 +01:00

🍵 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
git clone <repo-url>
cd the-tip-top-frontend
  1. Installer les dépendances
npm install
  1. Configurer les variables d'environnement Créer un fichier .env.local :
# 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
  1. Lancer le serveur de développement
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

  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

  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

# 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:

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

# 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

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.