Orchestrator — workflows et bonnes pratiques
Exemple complet d'un workflow multi-services (création d'une organization), liste des workflows à implémenter et bonnes pratiques de codage saga / compensation. Pour la vue d'ensemble, voir Orchestrator — overview.
Workflows à Implémenter
Phase 1 : Core
| Workflow | Use Case | Services impliqués |
|---|---|---|
| Créer Organization | CreateOrganizationUseCase | Customer, Ledger, Notification |
| Créer Compte Individuel | CreateIndividualAccountUseCase | Customer, Ledger, Notification |
| Ajouter Membre | AddOrganizationMemberUseCase | Customer, Notification |
Phase 2 : Transactions
| Workflow | Use Case | Services impliqués |
|---|---|---|
| Transfert P2P | ProcessTransferUseCase | Ledger, Notification, (Risk Engine) |
| Dépôt | ProcessDepositUseCase | Ledger, Notification |
| Retrait | ProcessWithdrawalUseCase | Ledger, Notification, (Provider) |
Phase 3 : KYC & Compliance
| Workflow | Use Case | Services impliqués |
|---|---|---|
| Soumettre KYC | SubmitKycUseCase | Customer |
| Valider KYC | ValidateKycUseCase | Customer, Ledger (upgrade limits) |
Bonnes Pratiques
1. Idempotence
Chaque opération doit pouvoir être rejouée sans effet de bord :
typescript
// Utiliser un idempotencyKey
async execute(input: CreateOrganizationInput): Promise<Result> {
// Vérifier si déjà traité
const existing = await this.findByIdempotencyKey(input.idempotencyKey);
if (existing) return existing;
// ... créer
}2. Timeouts
Configurer des timeouts sur les appels inter-services :
typescript
// infrastructure/adapters/http/base-http.adapter.ts
const response = await firstValueFrom(
this.httpService.post(url, data).pipe(
timeout(5000), // 5 secondes max
),
);3. Circuit Breaker (Future)
Implémenter un circuit breaker pour les services instables :
typescript
// Utiliser @nestjs/terminus ou opossum4. Tracing
Propager le X-Request-Id pour tracer les requêtes :
typescript
// Middleware qui propage les headers
const headers = {
'X-Request-Id': context.requestId,
'X-User-Id': context.userId,
};