Aller au contenu principal

Architecture de l'application

Vue d'ensemble

L'application Promotion est composée de trois parties principales :

  1. Backend (NestJS) : API REST pour la gestion des promotions et l'accès aux données clients
  2. Frontend (React + TypeScript) : Interface utilisateur pour la consultation et la gestion
  3. 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)
  • Endpoints :
    • GET /api/publique/data - Liste toutes les promotions
    • POST /api/publique/data - Crée une promotion
    • PUT /api/publique/data/:id - Met à jour une promotion
    • DELETE /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 clients
    • GET /api/publique/clients/:id - Récupère un client par ID
    • POST /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 produits
    • GET /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é via KONG_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

  1. 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
  2. FideliteDataPage (/fidelite)

    • Consultation des clients
    • Recherche par ID
    • Filtres avancés (niveau de fidélisation, dates)
    • Tri des colonnes
  3. 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

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