Architecture de l'application
Vue d'ensemble
L'application Promotion est composée de trois parties principales :
- Backend (NestJS) : API REST pour la gestion des promotions et l'accès aux données clients
- Frontend (React + TypeScript) : Interface utilisateur pour la consultation et la gestion
- Documentation (Docusaurus) : Documentation technique de l'API
Structure du backend
Modules
1. PromotionDataModule (/api/publique/data)
- Responsabilité : Gestion CRUD des promotions
- Base de données : PostgreSQL via Drizzle ORM
- Validations :
- Vérification des clients via
/api/private/clients/{id} - Vérification des magasins via
/api/private/magasins/{id} - Autocomplétion des catégories produits
- Validation des applications concernées (FIDELITE, E-COMMERCE, MAGASIN, PROMOTION)
- Vérification des clients via
- Endpoints :
GET /api/publique/data- Liste toutes les promotionsPOST /api/publique/data- Crée une promotionPUT /api/publique/data/:id- Met à jour une promotionDELETE /api/publique/data/:id- Supprime une promotion
2. FideliteModule (/api/publique)
- Responsabilité : Accès aux données clients et création de promotions via Kong API Gateway
- Source de données : Application Fidélité (via Kong)
- Endpoints :
GET /api/publique/clients- Liste tous les clientsGET /api/publique/clients/:id- Récupère un client par IDPOST /api/publique/promotions- Crée une promotion depuis Fidélité
3. ReferentielModule (/api/publique/produits)
- Responsabilité : Accès au référentiel produits via Kong API Gateway
- Source de données : API publique produits (via Kong)
- Endpoints :
GET /api/publique/produits- Liste tous les produitsGET /api/publique/produits/:id- Récupère un produit par ID
Services externes
Kong API Gateway
- URL : Configurée via
KONG_API_GATEWAY(variable d'environnement) - Authentification : Header
X-API-Key(configuré viaKONG_API_KEY) - Usage :
- Récupération des données clients depuis Fidélité
- Récupération des produits depuis le référentiel
Base de données PostgreSQL
- Schéma :
promotion_data(table principale) - ORM : Drizzle
- Migrations : Gérées dans
backend/drizzle/
Structure du frontend
Pages
-
PromotionDataPage (
/)- Gestion complète des promotions
- Formulaire avec :
- Catégorie, Type, Valeur, Unité
- Période de validité
- Ciblage (Client, Produit, Magasin)
- Conditions (Seuil, Quantités)
- Catégorie Produit avec autocomplétion
- Sélection des applications concernées
- Description et options
- Tableau avec tous les champs de la base de données
- Fonctionnalités de tri et de filtrage
-
FideliteDataPage (
/fidelite)- Consultation des clients
- Recherche par ID
- Filtres avancés (niveau de fidélisation, dates)
- Tri des colonnes
-
ReferentielPage (
/referentiel)- Consultation du référentiel produits
- Recherche par ID
- Filtres (code produit, libellé, statut)
- Tri des colonnes
Composants partagés
- Header : Navigation entre les pages
- Notifications : Système de notifications toast
Variables d'environnement
Backend
# Base de données
DATABASE_URL=postgresql://user:password@host:5432/dbname
# Kong API Gateway
KONG_API_GATEWAY=https://kong.staging.ubsi.fr
KONG_API_KEY=your-api-key
# Application Fidélité (legacy)
ORIGIN_APP_FIDELITE=https://fidelite.staging.ubsi.fr
# Email (MailerModule)
# Configuré pour Gmail dans app.module.ts
Frontend
# Backend API
VITE_API_HOST=https://promotion.staging.ubsi.fr
# Configuration
VITE_CURRENT_CONFIG=local
Flux de données
1. Gestion des promotions
Frontend → POST /api/publique/data → Backend → PostgreSQL
Frontend ← 201 Created ← Backend ← PostgreSQL
2. Consultation des clients
Frontend → GET /api/publique/clients → Backend → Kong → Fidélité
Frontend ← 200 OK ← Backend ← Kong ← Fidélité
3. Consultation des produits
Frontend → GET /api/publique/produits → Backend → Kong → Référentiel
Frontend ← 200 OK ← Backend ← Kong ← Référentiel
Sécurité
- CORS : Configuré dans le backend pour accepter les requêtes du frontend
- Kong API Key : Authentification pour les appels aux services externes
- Validation : DTOs NestJS pour valider les payloads
- Soft delete : Les promotions ne sont pas supprimées physiquement (champ
dateSuppression) - Validation des références :
- Clients et magasins validés via les API privées
- Catégories produits avec autocomplétion
- Applications concernées limitées aux valeurs autorisées
- Interface utilisateur :
- Sélecteur multi-choix pour les applications concernées
- Champs de recherche avec autocomplétion
- Validation en temps réel des champs
Déploiement
- Backend : Déployé sur https://promotion.staging.ubsi.fr
- Frontend : Servi par le backend (build statique)
- Documentation : Accessible via Swagger UI
Technologies utilisées
Backend
- Framework : NestJS
- ORM : Drizzle
- Base de données : PostgreSQL
- HTTP Client : Axios (via @nestjs/axios)
- Documentation : Swagger/OpenAPI
- Email : @nestjs-modules/mailer + Handlebars
Frontend
- Framework : React 18 + TypeScript
- Build : Vite
- Routing : React Router v6
- Styling : Inline styles (design system custom)
- HTTP : Fetch API native