Zrušení objednávky
Potvrzenou nebo balenou objednávku jde zrušit – sága pak vrátí zboží na sklad (kompenzace). Doručení viz Expedice.
Na této stránce
Shrnutí: Zákazník (nebo admin) zruší potvrzenou objednávku – od e-shop kroku 6 i během balení, po odeslání už ne. Zrušení spustí kompenzaci – příkaz
ReleaseStockV1. Balení, odeslání a doručení (dřív „Vyřídit“) popisuje Expedice.
Zrušení
sequenceDiagram
autonumber
actor O as Obsluha
participant S as OrderService
participant ODB as ordering.db
participant OW as OutboxWorker
participant SG as OrderSagaOrchestrator
participant H as Handlery (oznámení, překladač)
participant MQ as RabbitMQ
participant I as Inventory.Api
O->>S: CancelAsync(id)
S->>S: order.Cancel() – z Confirmed nebo Packing → OrderCancelled
S->>ODB: COMMIT: Order Cancelled + Outbox[OrderCancelled]
S-->>O: zrušeno
OW->>SG: OrderCancelled
SG->>SG: saga Reserved → ReleasingStock
SG->>ODB: COMMIT: Outbox[ReleaseStockV1]
OW->>H: OrderCancelled → oznámení + OrderCancelledV1
OW->>MQ: ReleaseStockV1
MQ->>I: ReleaseStockV1
I->>I: vrátit zboží podle StockReservations
I->>MQ: StockReleasedV1
MQ->>SG: StockReleasedV1
SG->>SG: saga → Released
Co si všimnout
OrderService.CancelAsynco skladu neví – jen změní stav. Vrácení zboží je reakce ságy na událost.- Sklad vrací zboží podle svých rezervací, ne podle položek objednávky – pracuje jen s tím, co sám zná.
- Zrušit jde potvrzenou nebo balenou objednávku;
Pendingčeká na rozhodnutí ságy,Shippedje už na cestě (pravidlo hlídá entitaOrder). Souběh se současným odesláním řešíOrder.Version– viz Expedice.