Files
THE-TIP-TOP/backend
Andil 570f5d44f5
All checks were successful
Tests / Backend - Tests skipped: 7, passed: 27
Backend Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 60.55% (333/550) * Lines of Code: 550 #### Quality Gates Summary No active quality gates.
Tests / Frontend - Lint, Tests et Build passed: 45
Frontend Coverage #### Project Overview No changes detected, that affect the code coverage. * Line Coverage: 86.14% (230/267) * Lines of Code: 267 #### Quality Gates Summary No active quality gates.
THE-TIP-TOP-MULTIBRANCH/pipeline/head This commit looks good
security: remove hardcoded admin credentials
2026-08-28 09:00:51 +00:00
..
2026-08-17 00:23:18 +02:00
2026-08-23 11:04:09 +00:00

Thé Tip Top – Backend API

Présentation

Backend REST du jeu-concours fictif Thé Tip Top, réalisé dans le cadre de la certification Expert en Stratégie et Transformation Digitale.

L’API fournit les services des espaces CLIENT, EMPLOYEE et ADMIN et prend notamment en charge :

  • inscription, vérification email et connexion ;
  • authentification JWT et Google OAuth 2.0 ;
  • rôles et autorisations ;
  • tickets, participations et gains ;
  • remise des lots ;
  • configuration des phases du jeu ;
  • tirage au sort final ;
  • notifications email ;
  • administration et statistiques.

Stack technique

Technologie Utilisation
Node.js 22 Runtime
Express.js API REST
PostgreSQL 16 Base de données
Prisma ORM 6 ORM et migrations
JWT Authentification
Passport.js Authentification externe
Google OAuth 2.0 Connexion Google
Bcrypt Hachage des mots de passe
Zod Validation
Nodemailer Emails
Helmet Sécurité HTTP
express-rate-limit Rate limiting
Swagger / OpenAPI Documentation
Jest / Supertest Tests
Docker Conteneurisation

Authentification

Email / mot de passe

Le parcours comprend l’inscription, le hachage Bcrypt, l’envoi d’un code de vérification par email, la validation du compte, la connexion et la génération d’un JWT.

Google OAuth 2.0

Utilisateur
  ↓
Frontend
  ↓
API /api/auth/google
  ↓
Google OAuth 2.0
  ↓
Callback backend
  ↓
Création / récupération utilisateur
  ↓
JWT
  ↓
Redirection frontend

Les secrets OAuth restent hors du dépôt Git.

Rôles

CLIENT

  • participer au jeu ;
  • consulter ses gains ;
  • gérer son profil.

EMPLOYEE

  • rechercher et vérifier un gain ;
  • valider la remise d’un lot.

ADMIN

  • consulter les statistiques ;
  • créer des employés ;
  • configurer le jeu ;
  • effectuer le tirage final ;
  • consulter le grand gagnant.

Jeu-concours

Phases applicatives :

  • NOT_CONFIGURED
  • SCHEDULED
  • OPEN
  • CLAIM_ONLY
  • CLOSED

Principales règles métier :

  • un ticket ne peut être utilisé qu’une fois ;
  • les tickets sont gagnants ;
  • les comptes EMPLOYEE et ADMIN ne participent pas comme clients ;
  • plusieurs participations d’un client n’augmentent pas ses chances au tirage final ;
  • un seul grand gagnant peut être enregistré ;
  • le tirage final respecte les contraintes temporelles du jeu.

Notifications email

Nodemailer est utilisé notamment pour la vérification des comptes et les notifications liées aux gains et au tirage final. La configuration SMTP est fournie par variables d’environnement.

Sécurité

  • Bcrypt ;
  • JWT ;
  • Google OAuth 2.0 ;
  • Zod ;
  • contrôle d’accès par rôle ;
  • Helmet ;
  • rate limiting ;
  • secrets externalisés ;
  • HTTPS via Traefik ;
  • séparation DEV / PREPROD / PROD.

Ne jamais versionner les mots de passe, tokens, secrets JWT, secrets OAuth ou identifiants SMTP.

Modèle de données principal

  • User : utilisateurs et rôles CLIENT / EMPLOYEE / ADMIN.
  • Ticket : code unique, lot associé et état d’utilisation.
  • Lot : lot, description, valeur et répartition.
  • Participation : participation d’un utilisateur avec un ticket.
  • Claim : gestion de la remise du gain.
  • GameSettings : configuration temporelle du concours.
  • GrandPrizeWinner : résultat du tirage final.

Installation locale

Prérequis : Node.js 22, npm et PostgreSQL 16.

npm install

Exemple de .env local :

PORT=5000
NODE_ENV=development
DATABASE_URL="postgresql://postgres:password@localhost:5432/the_tip_top_db"
JWT_SECRET="change_me"
APP_URL="http://localhost:5000"
FRONTEND_URL="http://localhost:5173"
MAIL_HOST="smtp.example.com"
MAIL_PORT=587
MAIL_USER="user@example.com"
MAIL_PASS="change_me"
MAIL_FROM="Thé Tip Top <user@example.com>"
GOOGLE_CLIENT_ID=""
GOOGLE_CLIENT_SECRET=""

Ces valeurs sont uniquement des exemples.

Prisma

npx prisma generate
npx prisma migrate dev
npx prisma migrate deploy
npx prisma db seed
npx prisma studio

Lancement

Développement :

npm run dev

Démarrage standard :

npm start

API locale généralement disponible sur http://localhost:5000.

Tests

npm test

Les tests Jest/Supertest couvrent notamment l’inscription, la connexion, les autorisations, les participations, les phases du jeu, le tirage final, les notifications, l’authentification Google et des scénarios E2E.

Dans Jenkins, une base PostgreSQL temporaire est créée. Les migrations et le seed sont exécutés avant les tests, puis les résultats sont publiés au format JUnit.

Documentation API

Swagger UI est accessible localement sur :

http://localhost:5000/api-docs

CI/CD

Le projet utilise Gitea, Jenkins, Docker et un Registry privé.

feature/*  → CI uniquement
develop    → DEV automatique
release-*  → PREPROD automatique
main       → validation manuelle → PROD

Pipeline :

Checkout
  ↓
Tests backend + PostgreSQL temporaire
  ↓
Lint + Build frontend
  ↓
Docker Build
  ↓
Registry
  ↓
Déploiement
  ↓
Contrôle des conteneurs

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

Infrastructure

  • Docker / Docker Compose ;
  • Gitea ;
  • Jenkins ;
  • Docker Registry ;
  • Traefik ;
  • Let's Encrypt / HTTPS ;
  • PostgreSQL ;
  • Prometheus ;
  • Grafana ;
  • cAdvisor ;
  • Node Exporter.

Arborescence simplifiée

backend/
├── prisma/
│   ├── migrations/
│   ├── schema.prisma
│   └── seed.js
├── src/
│   ├── config/
│   ├── controllers/
│   ├── docs/
│   ├── middlewares/
│   ├── routes/
│   ├── utils/
│   ├── validations/
│   └── app.js
├── tests/
├── Dockerfile
├── package.json
└── README.md

Projet

Projet étudiant fictif réalisé dans le cadre de la certification Expert en Stratégie et Transformation Digitale.

Client fictif : Thé Tip Top.