feat(orders): saga de orquestração liga o checkout ponta a ponta (fase 4b) - #6
Conversation
…e 4b) O Orders deixa de só produzir e passa a CONSUMIR as respostas dos participantes, dirigindo uma saga persistida até o estado final do pedido (spec §5.3, ADR-003). - Contracts: ReleaseStockRequested (comando de compensação emitido pela saga) - Saga: OrderSagaInstance (estado persistido por pedido) + OrderSagaCoordinator (carrega instância, avança a máquina de estados OrderSaga, aplica efeitos: confirma, cancela ou pede compensação) — não salva; roda na transação do inbox - PlaceOrder: inicia a saga (Started) ao criar o pedido - Infrastructure: tabela saga_state (schema orders) + migration AddSagaState - Consumers: 5 consumidores finos (StockReserved/StockReservationFailed/PaymentCharged/ PaymentFailed/StockReleased) traduzem evento -> trigger da saga - Host: wire do consumer (AddRabbitMqConsumer + os 5 consumidores + coordinator) Fluxo: OrderPlaced -> (Inventory reserva) StockReserved -> (Payments cobra) PaymentCharged -> saga Completed -> Order Confirmed. Falhas: StockReservationFailed -> Cancelled; PaymentFailed -> Compensating + ReleaseStockRequested -> (StockReleased) -> Cancelled. Testes: happy path confirma; falha de estoque cancela; falha de pagamento compensa e cancela. Build limpo (0/0); unit 4/4; integration 11 passam + 2 skipped (F1/F4).
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughThis PR implements distributed order orchestration via a saga pattern. It introduces saga persistence, a coordinator that drives state transitions and emits corresponding outbox events, event consumers that respond to external service outcomes, and integration that ties saga initialization into order creation with comprehensive end-to-end tests. ChangesOrder Saga Orchestration
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…e 4b) (#6) O Orders deixa de só produzir e passa a CONSUMIR as respostas dos participantes, dirigindo uma saga persistida até o estado final do pedido (spec §5.3, ADR-003). - Contracts: ReleaseStockRequested (comando de compensação emitido pela saga) - Saga: OrderSagaInstance (estado persistido por pedido) + OrderSagaCoordinator (carrega instância, avança a máquina de estados OrderSaga, aplica efeitos: confirma, cancela ou pede compensação) — não salva; roda na transação do inbox - PlaceOrder: inicia a saga (Started) ao criar o pedido - Infrastructure: tabela saga_state (schema orders) + migration AddSagaState - Consumers: 5 consumidores finos (StockReserved/StockReservationFailed/PaymentCharged/ PaymentFailed/StockReleased) traduzem evento -> trigger da saga - Host: wire do consumer (AddRabbitMqConsumer + os 5 consumidores + coordinator) Fluxo: OrderPlaced -> (Inventory reserva) StockReserved -> (Payments cobra) PaymentCharged -> saga Completed -> Order Confirmed. Falhas: StockReservationFailed -> Cancelled; PaymentFailed -> Compensating + ReleaseStockRequested -> (StockReleased) -> Cancelled. Testes: happy path confirma; falha de estoque cancela; falha de pagamento compensa e cancela. Build limpo (0/0); unit 4/4; integration 11 passam + 2 skipped (F1/F4).
Summary by CodeRabbit