Go to file
soufiane 22553e5c89 fix: add ticket statistics properties to User type
Added optional ticketsCount, pendingTickets, and claimedTickets properties
to User interface to fix TypeScript build error in user details page. These
properties are populated by the getUserById API endpoint.

Fixes: TypeScript compilation error preventing deployment

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-19 15:27:18 +01:00
app feat: add user details page and getUserById service method 2025-11-19 15:09:00 +01:00
components style: apply modern design to remaining pages 2025-11-19 03:18:43 +01:00
contexts fix: export AuthContext to allow import in useAuth hook 2025-11-18 01:57:28 +01:00
docs dev 2025-11-17 23:38:02 +01:00
hooks dev 2025-11-17 23:38:02 +01:00
lib dev 2025-11-17 23:38:02 +01:00
public dev 2025-11-17 23:38:02 +01:00
scripts dev 2025-11-17 23:38:02 +01:00
services feat: add user details page and getUserById service method 2025-11-19 15:09:00 +01:00
types fix: add ticket statistics properties to User type 2025-11-19 15:27:18 +01:00
utils feat: modern UI redesign with SVG icons and improved styling 2025-11-19 02:29:41 +01:00
.dockerignore Initial commit du frontend The Tip Top 2025-10-30 11:11:59 +00:00
.env feat: add Google and Facebook OAuth configuration 2025-11-18 20:26:23 +01:00
.env.dev feat: add Google and Facebook OAuth configuration 2025-11-18 20:26:23 +01:00
.env.example feat: add Google and Facebook OAuth configuration 2025-11-18 20:26:23 +01:00
.env.preprod feat: add Google and Facebook OAuth configuration 2025-11-18 20:26:23 +01:00
.env.production feat: add Google and Facebook OAuth configuration 2025-11-18 20:26:23 +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
Dockerfile fix: revert to standard Docker build (standalone incompatible with SSR errors) 2025-11-18 17:13:21 +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: force fresh builds to prevent cache issues between localhost and deployed site 2025-11-19 03:09:51 +01:00
jest.config.js dev 2025-11-17 23:38:02 +01:00
jest.setup.js dev 2025-11-17 23:38:02 +01:00
middleware.ts dev 2025-11-17 23:38:02 +01:00
next.config.js fix: force fresh builds to prevent cache issues between localhost and deployed site 2025-11-19 03:09:51 +01:00
package-lock.json fix: resolve ESLint errors and React Hooks violations 2025-11-18 15:56:10 +01:00
package.json fix: downgrade ESLint to v8 for Next.js compatibility 2025-11-18 15:49:11 +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
tailwind.config.js dev 2025-11-17 23:38:02 +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
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.