-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathcancel_order_orchestration_saga.go
More file actions
105 lines (80 loc) · 3.23 KB
/
cancel_order_orchestration_saga.go
File metadata and controls
105 lines (80 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package adapters
import (
"context"
"github.com/stackus/edat/core"
"github.com/stackus/edat/msg"
"github.com/stackus/edat/saga"
"github.com/stackus/ftgogo/order/internal/domain"
"github.com/stackus/ftgogo/serviceapis/accountingapi"
"github.com/stackus/ftgogo/serviceapis/kitchenapi"
"github.com/stackus/ftgogo/serviceapis/orderapi"
)
type cancelOrderSagaDefinition struct {
steps []saga.Step
}
func NewCancelOrderOrchestrationSaga(store saga.InstanceStore, publisher msg.CommandMessagePublisher, options ...saga.OrchestratorOption) *saga.Orchestrator {
definition := &cancelOrderSagaDefinition{}
definition.steps = []saga.Step{
saga.NewRemoteStep().
Action(definition.beginCancelOrder).
Compensation(definition.undoBeginCancelOrder),
saga.NewRemoteStep().
Action(definition.beginCancelTicket).
Compensation(definition.undoBeginCancelTicket),
saga.NewRemoteStep().
Action(definition.reverseAuthorization),
saga.NewRemoteStep().
Action(definition.confirmCancelTicket),
saga.NewRemoteStep().
Action(definition.confirmCancelOrder),
}
return saga.NewOrchestrator(definition, store, publisher, options...)
}
func (s *cancelOrderSagaDefinition) SagaName() string {
return "orderservice.CancelOrderSaga"
}
func (s *cancelOrderSagaDefinition) ReplyChannel() string {
return s.SagaName() + ".reply"
}
func (s *cancelOrderSagaDefinition) Steps() []saga.Step {
return s.steps
}
func (s *cancelOrderSagaDefinition) OnHook(saga.LifecycleHook, *saga.Instance) {}
func (s *cancelOrderSagaDefinition) beginCancelOrder(_ context.Context, data core.SagaData) msg.DomainCommand {
sagaData := data.(*domain.CancelOrderSagaData)
return &orderapi.BeginCancelOrder{OrderID: sagaData.OrderID}
}
func (s *cancelOrderSagaDefinition) undoBeginCancelOrder(_ context.Context, data core.SagaData) msg.DomainCommand {
sagaData := data.(*domain.CancelOrderSagaData)
return &orderapi.UndoCancelOrder{OrderID: sagaData.OrderID}
}
func (s *cancelOrderSagaDefinition) beginCancelTicket(_ context.Context, data core.SagaData) msg.DomainCommand {
sagaData := data.(*domain.CancelOrderSagaData)
return &kitchenapi.BeginCancelTicket{
TicketID: sagaData.TicketID,
RestaurantID: sagaData.RestaurantID,
}
}
func (s *cancelOrderSagaDefinition) undoBeginCancelTicket(_ context.Context, data core.SagaData) msg.DomainCommand {
sagaData := data.(*domain.CancelOrderSagaData)
return &kitchenapi.UndoCancelTicket{
TicketID: sagaData.TicketID,
RestaurantID: sagaData.RestaurantID,
}
}
func (s *cancelOrderSagaDefinition) reverseAuthorization(_ context.Context, data core.SagaData) msg.DomainCommand {
sagaData := data.(*domain.CancelOrderSagaData)
return &accountingapi.ReverseAuthorizeOrder{
ConsumerID: sagaData.ConsumerID,
OrderID: sagaData.OrderID,
OrderTotal: sagaData.OrderTotal,
}
}
func (s *cancelOrderSagaDefinition) confirmCancelTicket(_ context.Context, data core.SagaData) msg.DomainCommand {
sagaData := data.(*domain.CancelOrderSagaData)
return &kitchenapi.ConfirmCancelTicket{TicketID: sagaData.TicketID}
}
func (s *cancelOrderSagaDefinition) confirmCancelOrder(_ context.Context, data core.SagaData) msg.DomainCommand {
sagaData := data.(*domain.CancelOrderSagaData)
return &orderapi.ConfirmCancelOrder{OrderID: sagaData.OrderID}
}