API publique et intégration
Cette section explique comment les autres applications peuvent consommer notre API et comprendre nos fonctionnalités.
Accès au Swagger
- UI: https://promotion.staging.ubsi.fr/api/swagger
- JSON: https://promotion.staging.ubsi.fr/api/swagger/json
- YAML: https://promotion.staging.ubsi.fr/api/swagger/yaml
Les routes ci-dessus sont exposées par l’application (voir backend/src/main.ts).
Base URL
- Hôte: https://promotion.staging.ubsi.fr
- API:
https://promotion.staging.ubsi.fr/api/...
Authentification
- Public: pas d’authentification sur les routes publiques listées ci-dessous.
- Interne: certaines routes internes peuvent nécessiter une configuration d’accès au niveau du réseau ou du reverse-proxy.
Conventions générales
- Format: JSON UTF-8
- Champs temporels: ISO 8601 (string) dans les réponses (sérialisation automatique des
Date). - Soft delete:
promotion_datautilisedateSuppression. À ce jour,GET /api/publique/datane filtre pas automatiquement les entrées “supprimées”. - Découverte des endpoints: via Swagger (liens ci-dessus). Les ressources publiques sont préfixées par
/api/publique/.... - Pagination/tri/filtres: non disponibles pour l’instant; exposés dès que nécessaires.
Ressources publiques principales
Promotion data — /api/publique/data
Gestion des données de promotions. Voir contrôleur backend/src/promotion-data/promotion-data.controller.ts et schéma backend/src/db/schema.ts (promotionDataTable).
- GET
/api/publique/data→ 200:PromotionData[] - POST
/api/publique/data→ 201:PromotionDatacréé - PUT
/api/publique/data/:id→ 200:PromotionDatamis à jour, 404 si non trouvé - DELETE
/api/publique/data/:id→ 204: pas de contenu, 404 si non trouvé - POST
/api/publique/data/fidelite→ 201:PromotionDatacréé depuis l'application Fidélité
Modèle PromotionData (réponse)
Champs:
-
Identifiants et dates
id: number (identifiant technique)dateCreation: datetime ISO (création)dateModification: datetime ISO (dernière mise à jour)dateSuppression: datetime ISO | null (soft delete)
-
Classification
categoriePromotion:EVENT | DESTOCKAGE | FIDELITE | PANIER | PRODUIT | PRODUIT_CATEGORIEtypePromotion:POURCENTAGE | MONTANT_FIXE | PRODUIT_OFFERT | SEUIL_PANIER
-
Ciblage (null = tous, tableau = liste d'IDs ciblés)
idClient: string[] | null (validé via/api/private/clients/{id})idProduit: string[] | null (validé via le référentiel)idMagasin: string[] | null (validé via/api/private/magasins/{id})categorieProduit: string | null (catégorie de produit ciblée, avec autocomplétion)
-
Valeurs et conditions
valeurPromotion: number (montant ou pourcentage selonuniteValeur)uniteValeur:PERCENTouEUROautoAppliquee: boolean (true par défaut)seuilMontant: number | null (montant minimum en centimes)quantiteAchat: number | null (quantité d'achat requise)description: string (description marketing)
-
Période de validité
dateDebut: datetime ISOdateFin: datetime ISO
-
Métadonnées
applicationCreatrice: string (origine de la promotion, ex: 'FIDELITE')applicationsConcernees: string[] (applications cibles, parmi: 'FIDELITE', 'E-COMMERCE', 'MAGASIN', 'PROMOTION')
Payload création (POST) exemple
{
"categoriePromotion": "FIDELITE",
"typePromotion": "POURCENTAGE",
"uniteValeur": "PERCENT",
"valeurPromotion": 15,
"dateDebut": "2025-09-27T12:34:56.000Z",
"dateFin": "2025-10-31T23:59:59.000Z",
"idClient": ["CLIENT123", "CLIENT456"],
"idProduit": ["SKU-ABC-123", "SKU-DEF-456"],
"idMagasin": ["MAG001", "MAG002"],
"categorieProduit": "ELECTRONIQUE",
"description": "-10% pour les membres fidèles sur l'électronique",
"applicationCreatrice": "app-promo",
"applicationConcernee": "frontend-web",
"autoAppliquee": true,
"seuilMontant": 5000,
"quantiteAchat": 2
}
Payload mise à jour (PUT) exemple
{
"valeurPromotion": 20,
"dateFin": "2025-11-15T23:59:59.000Z",
"description": "-20% pour les membres fidèles sur l'électronique",
"seuilMontant": 3000,
"quantiteAchat": 1
}
Réponse création (201) exemple
{
"id": 42,
"categoriePromotion": "FIDELITE",
"typePromotion": "POURCENTAGE",
"uniteValeur": "PERCENT",
"valeurPromotion": 15,
"dateDebut": "2025-09-27T12:34:56.000Z",
"dateFin": "2025-10-31T23:59:59.000Z",
"idClient": ["CLIENT123", "CLIENT456"],
"idProduit": ["SKU-ABC-123", "SKU-DEF-456"],
"idMagasin": ["MAG001", "MAG002"],
"categorieProduit": "ELECTRONIQUE",
"description": "-10% pour les membres fidèles sur l'électronique",
"applicationCreatrice": "app-promo",
"applicationConcernee": "frontend-web",
"autoAppliquee": true,
"seuilMontant": 5000,
"quantiteAchat": 2,
"dateCreation": "2025-09-27T12:34:56.000Z",
"dateModification": "2025-09-27T12:34:56.000Z",
"dateSuppression": null
}
Erreurs typiques
- 400 Bad Request: body mal formé ou types invalides.
- 404 Not Found: entité non trouvée (
PUT,DELETE). - 500 Internal Server Error: erreur serveur inattendue.
Fidélité — /api/publique
Gestion des données clients et création de promotions provenant de l'application Fidélité via la passerelle Kong. Voir contrôleur backend/src/fidelite/fidelite.controller.ts.
- GET
/api/publique/clients→ 200:ClientData[]- Liste de tous les clients - GET
/api/publique/clients/:id→ 200:ClientData- Récupère un client par son ID - POST
/api/publique/promotions→ 201:PromotionData- Crée une promotion depuis Fidélité
Modèle ClientData (réponse)
Champs:
id: number (identifiant)civilite: stringnom: stringprenom: stringanniversaire: datetime ISOadresseMail: stringtelephone: stringniveauFidelisation: string (Standard | Platine | Premium)pointsFidelite: numberdateDebutFidelisation: datetime ISOcreatedAt: datetime ISOupdatedAt: datetime ISOdeletedAt: datetime ISO | null
Autres ressources (internes/non publiques)
Ces contrôleurs existent dans le code mais ne sont pas exposés sous /api/publique/....
- Référentiel produits —
/api/publique/produitsGET /api/publique/produits→ 200: liste de tous les produitsGET /api/publique/produits/:id→ 200: récupère un produit par son ID- Voir
backend/src/referentiel/referentiel.controller.ts
Paramètres et erreurs typiques
- :id est un entier positif.
- 400 Bad Request: paramètre
idinvalide, body mal formé. - 404 Not Found: entité non trouvée.
- 422 Unprocessable Entity: violation métier/contraintes (si implémenté côté service/validation).
- 500 Internal Server Error: erreur serveur inattendue.
Découvrir/essayer l’API
- Utiliser le Swagger pour tester les routes et voir les schémas exposés.
- Les DTOs principaux:
CreatePromotionDataDto,UpdatePromotionDataDto(backend/src/promotion-data/dto/...).