Contexto CultivaFlow: Crear una campana requiere coordinar 4 servicios. Si el pago del credito AI falla, se deben cancelar los pasos anteriores automaticamente.
saga = CreateCampaignSaga([
SagaStep("validate_auth",
action=auth_svc.validate,
compensation=auth_svc.revoke),
SagaStep("create_campaign",
action=campaign_svc.create,
compensation=campaign_svc.cancel),
SagaStep("deduct_ai_credits",
action=billing_svc.deduct,
compensation=billing_svc.refund),
SagaStep("generate_copy",
action=ai_svc.generate,
compensation=ai_svc.discard),
])
result = await saga.execute(campaign_data)