-
Notifications
You must be signed in to change notification settings - Fork 0
/
order.go
132 lines (116 loc) · 3.83 KB
/
order.go
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package servicepusher
import (
"context"
"fmt"
"github.com/nam-truong-le/lambda-utils-go/v3/pkg/logger"
"github.com/nam-truong-le/lambda-utils-go/v3/pkg/pusher"
)
const (
eventOrderCreatedName = "order-created"
eventOrderPOSPaymentStartedName = "order-payment-started"
eventOrderPOSPaymentPaidName = "order-paid"
eventOrderDeliveredName = "order-delivered"
eventGroupFinalizedName = "group-finalized"
eventGroupDeliveredName = "group-delivered"
)
type EventOrderCreatedData struct {
StoreID string `json:"storeId"`
}
func PublishOrderCreated(ctx context.Context, data *EventOrderCreatedData) error {
log := logger.FromContext(ctx)
c, err := pusher.NewClient(ctx)
if err != nil {
return err
}
if err := c.Trigger(storeChannel(data.StoreID), eventOrderCreatedName, data); err != nil {
log.Errorf("failed to publish event [%s]: %v", eventOrderCreatedName, data)
return err
}
log.Infof("event published [%s]: %v", eventOrderCreatedName, data)
return nil
}
type EventOrderDeliveredData struct {
StoreID string `json:"storeId"`
}
func PublishOrderDelivered(ctx context.Context, data *EventOrderDeliveredData) error {
log := logger.FromContext(ctx)
c, err := pusher.NewClient(ctx)
if err != nil {
return err
}
if err := c.Trigger(storeChannel(data.StoreID), eventOrderDeliveredName, data); err != nil {
log.Errorf("failed to publish event [%s]: %v", eventOrderDeliveredName, data)
return err
}
log.Infof("event published [%s]: %v", eventOrderDeliveredName, data)
return nil
}
type EventOrderPOSPaymentStartedData struct {
StoreID string `json:"storeId"`
OrderID string `json:"orderId"`
}
func PublishOrderPOSPaymentStarted(ctx context.Context, data *EventOrderPOSPaymentStartedData) error {
log := logger.FromContext(ctx)
c, err := pusher.NewClient(ctx)
if err != nil {
return err
}
if err := c.Trigger(storeChannel(data.StoreID), eventOrderPOSPaymentStartedName, data); err != nil {
log.Errorf("failed to publish event [%s]: %v", eventOrderPOSPaymentStartedName, data)
return err
}
log.Infof("event published [%s]: %v", eventOrderPOSPaymentStartedName, data)
return nil
}
type EventOrderPOSPaymentPaidData struct {
StoreID string `json:"storeId"`
OrderID string `json:"orderId"`
}
func PublishOrderPOSPaymentPaid(ctx context.Context, data *EventOrderPOSPaymentPaidData) error {
log := logger.FromContext(ctx)
c, err := pusher.NewClient(ctx)
if err != nil {
return err
}
if err := c.Trigger(storeChannel(data.StoreID), eventOrderPOSPaymentPaidName, data); err != nil {
log.Errorf("failed to publish event [%s]: %v", eventOrderPOSPaymentPaidName, data)
return err
}
log.Infof("event published [%s]: %v", eventOrderPOSPaymentPaidName, data)
return nil
}
type EventGroupFinalizedData struct {
StoreID string `json:"storeId"`
}
func PublishGroupFinalized(ctx context.Context, data *EventGroupFinalizedData) error {
log := logger.FromContext(ctx)
c, err := pusher.NewClient(ctx)
if err != nil {
return err
}
if err := c.Trigger(storeChannel(data.StoreID), eventGroupFinalizedName, data); err != nil {
log.Errorf("failed to publish event [%s]: %v", eventGroupFinalizedName, data)
return err
}
log.Infof("event published [%s]: %v", eventGroupFinalizedName, data)
return nil
}
type EventGroupDeliveredData struct {
StoreID string `json:"storeId"`
}
func PublishGroupDelivered(ctx context.Context, data *EventGroupDeliveredData) error {
log := logger.FromContext(ctx)
c, err := pusher.NewClient(ctx)
if err != nil {
return err
}
if err := c.Trigger(storeChannel(data.StoreID), eventGroupDeliveredName, data); err != nil {
log.Errorf("failed to publish event [%s]: %v", eventGroupDeliveredName, data)
return err
}
log.Infof("event published [%s]: %v", eventGroupDeliveredName, data)
return nil
}
func storeChannel(storeID string) string {
return fmt.Sprintf("restaurant-%s", storeID)
}