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 :

Base URL: https://lolipop.dctd-cie.com/api/applications
Swagger UI: https://lolipop.dctd-cie.com/api/docs

Lister toutes les applications

GET /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)

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

GET /api/applications/{appId}

RécupÚre les détails d'une application spécifique.

ParamĂštres de chemin

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

POST /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")
    }
  }
}
Important: Pour 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

Mettre Ă  jour une application

PUT /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

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

DELETE /api/applications/{appId}

Supprime dĂ©finitivement une application du systĂšme. Le consumer Kafka associĂ© sera arrĂȘtĂ© automatiquement.

Attention: Cette action est irréversible. Toutes les données de l'application seront supprimées.

ParamĂštres de chemin

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

POST /api/applications/{appId}/enable

Active une application et démarre son consumer Kafka pour traiter les messages du topic associé.

ParamĂštres de chemin

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

POST /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

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

POST /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.

Note: Cette opĂ©ration arrĂȘte tous les consumers existants et les redĂ©marre avec la configuration actuelle de la base de donnĂ©es.

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
}

Pour une documentation interactive complÚte avec la possibilité de tester les endpoints directement :

📖 Ouvrir Swagger UI 📄 Documentation JSON (OpenAPI)
Environnements: