API de gestion des applications â Enregistrement dynamique
Cette API permet de gérer dynamiquement les applications dans le systÚme d'orchestration de notifications sans modification de code ni redémarrage du service.
Vue d'ensemble
Le systÚme d'orchestration Temporal supporte maintenant plusieurs applications avec des audiences isolées. Chaque application :
- PossĂšde son propre topic Kafka pour recevoir les requĂȘtes d'orchestration
- Peut utiliser un workflow Temporal générique ou personnalisé
- Peut ĂȘtre activĂ©e ou dĂ©sactivĂ©e dynamiquement
- Isolent les audiences : les broadcasts d'une application n'affectent que ses propres utilisateurs
https://lolipop.dctd-cie.com/api/applicationsSwagger UI: https://lolipop.dctd-cie.com/api/docs
Lister toutes les applications
/api/applications
RĂ©cupĂšre la liste de toutes les applications enregistrĂ©es. Peut ĂȘtre filtrĂ©e par statut (activĂ©/dĂ©sactivĂ©).
ParamĂštres de requĂȘte (optionnels)
enabled(boolean) : Filtrer par statut activé/désactivé
Exemple de requĂȘte
GET https://lolipop.dctd-cie.com/api/applications?enabled=true
Content-Type: application/json
Exemple de réponse
{
"success": true,
"count": 2,
"applications": [
{
"appId": "eagence",
"name": "EAgence",
"topic": "eagence.orchestration-requests",
"workflow": "SharedDistributionWorkflow",
"consumerType": "generic",
"enabled": true,
"description": "Application de gestion d'agence",
"metadata": {
"criticalityRequired": true,
"defaultCriticality": 1,
"timezone": "Africa/Abidjan",
"businessHours": {
"start": "06:00",
"end": "22:00"
}
},
"createdAt": "2024-01-15T10:00:00.000Z",
"updatedAt": "2024-01-15T10:00:00.000Z"
}
]
}
Obtenir une application par ID
/api/applications/{appId}
RécupÚre les détails d'une application spécifique.
ParamĂštres de chemin
appId(string, requis) : Identifiant unique de l'application
Exemple de requĂȘte
GET https://lolipop.dctd-cie.com/api/applications/eagence
Content-Type: application/json
Exemple de réponse
{
"success": true,
"application": {
"appId": "eagence",
"name": "EAgence",
"topic": "eagence.orchestration-requests",
"workflow": "SharedDistributionWorkflow",
"consumerType": "generic",
"enabled": true,
"description": "Application de gestion d'agence",
"metadata": {
"criticalityRequired": true,
"defaultCriticality": 1,
"timezone": "Africa/Abidjan",
"businessHours": {
"start": "06:00",
"end": "22:00"
}
},
"createdAt": "2024-01-15T10:00:00.000Z",
"updatedAt": "2024-01-15T10:00:00.000Z"
}
}
Créer une nouvelle application
/api/applications
Enregistre une nouvelle application dans le systÚme. Le consumer Kafka sera automatiquement démarré si l'application est activée.
Corps de la requĂȘte
{
"appId": "ecompteur", // REQUIS - Identifiant unique (minuscules, alphanumériques, tirets, underscores)
"name": "ECompteur", // REQUIS - Nom de l'application
"topic": "ecompteur.orchestration-requests", // REQUIS - Topic Kafka unique
"workflow": "SharedDistributionWorkflow", // REQUIS - Nom du workflow Temporal
"consumerType": "generic", // Optionnel - "generic" (défaut) ou "custom"
"enabled": true, // Optionnel - Activer immédiatement (défaut: true)
"description": "Application de gestion des compteurs", // Optionnel
"metadata": { // Optionnel - Métadonnées de l'application
"criticalityRequired": true, // Optionnel - Exiger la criticité (défaut: true)
"defaultCriticality": 1, // Optionnel - Criticité par défaut (défaut: 1)
"timezone": "Africa/Abidjan", // Optionnel - Fuseau horaire (défaut: "Africa/Abidjan")
"businessHours": { // Optionnel - Heures d'ouverture
"start": "06:00", // Optionnel - Heure de début (défaut: "06:00")
"end": "22:00" // Optionnel - Heure de fin (défaut: "22:00")
}
}
}
consumerType: "generic", le champ workflow est ignoré car le systÚme utilise toujours SharedDistributionWorkflow. Pour un workflow personnalisé, utilisez consumerType: "custom" et spécifiez customConsumerClass.
Exemple de requĂȘte
POST https://lolipop.dctd-cie.com/api/applications
Content-Type: application/json
{
"appId": "ecompteur",
"name": "ECompteur",
"topic": "ecompteur.orchestration-requests",
"workflow": "SharedDistributionWorkflow",
"consumerType": "generic",
"enabled": true,
"description": "Application de gestion des compteurs",
"metadata": {
"criticalityRequired": true,
"defaultCriticality": 1,
"timezone": "Africa/Abidjan",
"businessHours": {
"start": "06:00",
"end": "22:00"
}
}
}
Exemple de réponse (201 Created)
{
"success": true,
"message": "Application ecompteur created successfully",
"application": {
"appId": "ecompteur",
"name": "ECompteur",
"topic": "ecompteur.orchestration-requests",
"workflow": "SharedDistributionWorkflow",
"consumerType": "generic",
"enabled": true,
"description": "Application de gestion des compteurs",
"metadata": {
"criticalityRequired": true,
"defaultCriticality": 1,
"timezone": "Africa/Abidjan",
"businessHours": {
"start": "06:00",
"end": "22:00"
}
},
"createdAt": "2024-01-15T10:00:00.000Z",
"updatedAt": "2024-01-15T10:00:00.000Z"
}
}
Codes d'erreur
400: Champs requis manquants409: Application ou topic déjà existant500: Erreur serveur
Mettre Ă jour une application
/api/applications/{appId}
Met Ă jour les propriĂ©tĂ©s d'une application existante. Les champs appId et topic ne peuvent pas ĂȘtre modifiĂ©s.
ParamĂštres de chemin
appId(string, requis) : Identifiant de l'application Ă mettre Ă jour
Corps de la requĂȘte
Tous les champs sont optionnels sauf indication contraire. Les champs non fournis ne seront pas modifiés.
{
"name": "ECompteur Pro", // Optionnel - Nouveau nom
"description": "Nouvelle description", // Optionnel
"enabled": false, // Optionnel - Désactiver l'application
"metadata": { // Optionnel - Métadonnées à mettre à jour
"defaultCriticality": 2,
"businessHours": {
"start": "08:00",
"end": "20:00"
}
}
}
Exemple de requĂȘte
PUT https://lolipop.dctd-cie.com/api/applications/ecompteur
Content-Type: application/json
{
"name": "ECompteur Pro",
"description": "Version professionnelle",
"metadata": {
"defaultCriticality": 2
}
}
Exemple de réponse (200 OK)
{
"success": true,
"message": "Application ecompteur updated successfully",
"application": {
"appId": "ecompteur",
"name": "ECompteur Pro",
"topic": "ecompteur.orchestration-requests",
"workflow": "SharedDistributionWorkflow",
"consumerType": "generic",
"enabled": true,
"description": "Version professionnelle",
"metadata": {
"criticalityRequired": true,
"defaultCriticality": 2,
"timezone": "Africa/Abidjan",
"businessHours": {
"start": "06:00",
"end": "22:00"
}
},
"updatedAt": "2024-01-15T11:00:00.000Z"
}
}
Supprimer une application
/api/applications/{appId}
Supprime dĂ©finitivement une application du systĂšme. Le consumer Kafka associĂ© sera arrĂȘtĂ© automatiquement.
ParamĂštres de chemin
appId(string, requis) : Identifiant de l'application Ă supprimer
Exemple de requĂȘte
DELETE https://lolipop.dctd-cie.com/api/applications/ecompteur
Content-Type: application/json
Exemple de réponse (200 OK)
{
"success": true,
"message": "Application ecompteur deleted successfully"
}
Activer une application
/api/applications/{appId}/enable
Active une application et démarre son consumer Kafka pour traiter les messages du topic associé.
ParamĂštres de chemin
appId(string, requis) : Identifiant de l'application Ă activer
Exemple de requĂȘte
POST https://lolipop.dctd-cie.com/api/applications/ecompteur/enable
Content-Type: application/json
Exemple de réponse (200 OK)
{
"success": true,
"message": "Application ecompteur enabled successfully",
"application": {
"appId": "ecompteur",
"enabled": true
}
}
Désactiver une application
/api/applications/{appId}/disable
DĂ©sactive une application et arrĂȘte son consumer Kafka. Les messages continueront d'arriver sur le topic mais ne seront plus traitĂ©s.
ParamĂštres de chemin
appId(string, requis) : Identifiant de l'application à désactiver
Exemple de requĂȘte
POST https://lolipop.dctd-cie.com/api/applications/ecompteur/disable
Content-Type: application/json
Exemple de réponse (200 OK)
{
"success": true,
"message": "Application ecompteur disabled successfully",
"application": {
"appId": "ecompteur",
"enabled": false
}
}
Recharger toutes les applications
/api/applications/reload
Recharge la configuration de toutes les applications depuis la base de données et redémarre tous les consumers Kafka. Utile aprÚs des modifications manuelles en base de données ou pour forcer un rechargement.
Exemple de requĂȘte
POST https://lolipop.dctd-cie.com/api/applications/reload
Content-Type: application/json
Exemple de réponse (200 OK)
{
"success": true,
"message": "Applications reloaded successfully",
"reloadedCount": 2,
"activeConsumers": 2
}
Swagger & Documentation API
Pour une documentation interactive complÚte avec la possibilité de tester les endpoints directement :
đ Ouvrir Swagger UI đ Documentation JSON (OpenAPI)- Production:
https://lolipop.dctd-cie.com/api/docs