Skip to content

Commit 3ac544f

Browse files
committed
use generic cqrs handlers in all examples
1 parent a0cfc22 commit 3ac544f

File tree

3 files changed

+24
-142
lines changed
  • _examples
    • basic/5-cqrs-protobuf
    • real-world-examples/consumer-groups

3 files changed

+24
-142
lines changed

_examples/basic/5-cqrs-protobuf/main.go

Lines changed: 8 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,7 @@ type BookRoomHandler struct {
2525
eventBus *cqrs.EventBus
2626
}
2727

28-
func (b BookRoomHandler) HandlerName() string {
29-
return "BookRoomHandler"
30-
}
31-
32-
// NewCommand returns type of command which this handle should handle. It must be a pointer.
33-
func (b BookRoomHandler) NewCommand() interface{} {
34-
return &BookRoom{}
35-
}
36-
37-
func (b BookRoomHandler) Handle(ctx context.Context, c interface{}) error {
38-
// c is always the type returned by `NewCommand`, so casting is always safe
39-
cmd := c.(*BookRoom)
40-
28+
func (b BookRoomHandler) Handle(ctx context.Context, cmd *BookRoom) error {
4129
// some random price, in production you probably will calculate in wiser way
4230
price := (rand.Int63n(40) + 1) * 10
4331

@@ -70,18 +58,7 @@ type OrderBeerOnRoomBooked struct {
7058
commandBus *cqrs.CommandBus
7159
}
7260

73-
func (o OrderBeerOnRoomBooked) HandlerName() string {
74-
// this name is passed to EventsSubscriberConstructor and used to generate queue name
75-
return "OrderBeerOnRoomBooked"
76-
}
77-
78-
func (OrderBeerOnRoomBooked) NewEvent() interface{} {
79-
return &RoomBooked{}
80-
}
81-
82-
func (o OrderBeerOnRoomBooked) Handle(ctx context.Context, e interface{}) error {
83-
event := e.(*RoomBooked)
84-
61+
func (o OrderBeerOnRoomBooked) Handle(ctx context.Context, event *RoomBooked) error {
8562
orderBeerCmd := &OrderBeer{
8663
RoomId: event.RoomId,
8764
Count: rand.Int63n(10) + 1,
@@ -100,13 +77,7 @@ func (o OrderBeerHandler) HandlerName() string {
10077
return "OrderBeerHandler"
10178
}
10279

103-
func (o OrderBeerHandler) NewCommand() interface{} {
104-
return &OrderBeer{}
105-
}
106-
107-
func (o OrderBeerHandler) Handle(ctx context.Context, c interface{}) error {
108-
cmd := c.(*OrderBeer)
109-
80+
func (o OrderBeerHandler) Handle(ctx context.Context, cmd *OrderBeer) error {
11081
if rand.Int63n(10) == 0 {
11182
// sometimes there is no beer left, command will be retried
11283
return fmt.Errorf("no beer left for room %s, please try later", cmd.RoomId)
@@ -137,22 +108,11 @@ func NewBookingsFinancialReport() *BookingsFinancialReport {
137108
return &BookingsFinancialReport{handledBookings: map[string]struct{}{}}
138109
}
139110

140-
func (b BookingsFinancialReport) HandlerName() string {
141-
// this name is passed to EventsSubscriberConstructor and used to generate queue name
142-
return "BookingsFinancialReport"
143-
}
144-
145-
func (BookingsFinancialReport) NewEvent() interface{} {
146-
return &RoomBooked{}
147-
}
148-
149-
func (b *BookingsFinancialReport) Handle(ctx context.Context, e interface{}) error {
111+
func (b *BookingsFinancialReport) Handle(ctx context.Context, event *RoomBooked) error {
150112
// Handle may be called concurrently, so it need to be thread safe.
151113
b.lock.Lock()
152114
defer b.lock.Unlock()
153115

154-
event := e.(*RoomBooked)
155-
156116
// When we are using Pub/Sub which doesn't provide exactly-once delivery semantics, we need to deduplicate messages.
157117
// GoChannel Pub/Sub provides exactly-once delivery,
158118
// but let's make this example ready for other Pub/Sub implementations.
@@ -323,19 +283,17 @@ func main() {
323283
}
324284

325285
err = commandProcessor.AddHandlers(
326-
BookRoomHandler{eventBus},
327-
OrderBeerHandler{eventBus},
286+
cqrs.NewCommandHandler("BookRoomHandler", BookRoomHandler{eventBus}.Handle),
287+
cqrs.NewCommandHandler("OrderBeerHandler", OrderBeerHandler{eventBus}.Handle),
328288
)
329289
if err != nil {
330290
panic(err)
331291
}
332292

333293
err = eventProcessor.AddHandlersGroup(
334294
"events",
335-
OrderBeerOnRoomBooked{commandBus},
336-
337-
NewBookingsFinancialReport(),
338-
295+
cqrs.NewGroupEventHandler(OrderBeerOnRoomBooked{commandBus}.Handle),
296+
cqrs.NewGroupEventHandler(NewBookingsFinancialReport().Handle),
339297
cqrs.NewGroupEventHandler(func(ctx context.Context, event *BeerOrdered) error {
340298
logger.Info("Beer ordered", watermill.LogFields{
341299
"room_id": event.RoomId,

_examples/real-world-examples/consumer-groups/crm-service/main.go

Lines changed: 8 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ func main() {
8888
EventsPublisher: publisher,
8989
EventHandlers: func(commandBus *cqrs.CommandBus, eventBus *cqrs.EventBus) []cqrs.EventHandler {
9090
return []cqrs.EventHandler{
91-
AddToCRM8Handler{},
92-
AddToSupport8Handler{},
91+
cqrs.NewEventHandler("AddToCRM-8", AddToCRM8Handler{}.Handle),
92+
cqrs.NewEventHandler("AddToSupport-8", AddToSupport8Handler{}.Handle),
9393
}
9494
},
9595
EventsSubscriberConstructor: func(handlerName string) (message.Subscriber, error) {
@@ -120,8 +120,8 @@ func main() {
120120
EventsPublisher: publisher,
121121
EventHandlers: func(commandBus *cqrs.CommandBus, eventBus *cqrs.EventBus) []cqrs.EventHandler {
122122
return []cqrs.EventHandler{
123-
AddToCRM9Handler{},
124-
AddToSupport9Handler{},
123+
cqrs.NewEventHandler("AddToCRM-9", AddToCRM9Handler{}.Handle),
124+
cqrs.NewEventHandler("AddToSupport-9", AddToSupport9Handler{}.Handle),
125125
}
126126
},
127127
EventsSubscriberConstructor: func(handlerName string) (message.Subscriber, error) {
@@ -152,71 +152,31 @@ func main() {
152152

153153
type AddToCRM8Handler struct{}
154154

155-
func (h AddToCRM8Handler) HandlerName() string {
156-
return "AddToCRM-8"
157-
}
158-
159-
func (h AddToCRM8Handler) NewEvent() interface{} {
160-
return &common.UserSignedUp{}
161-
}
162-
163-
func (h AddToCRM8Handler) Handle(ctx context.Context, event interface{}) error {
164-
e := event.(*common.UserSignedUp)
165-
155+
func (h AddToCRM8Handler) Handle(ctx context.Context, e *common.UserSignedUp) error {
166156
fmt.Println("Adding user", e.UserID, "to the CRM")
167157

168158
return nil
169159
}
170160

171161
type AddToSupport8Handler struct{}
172162

173-
func (h AddToSupport8Handler) HandlerName() string {
174-
return "AddToSupport-8"
175-
}
176-
177-
func (h AddToSupport8Handler) NewEvent() interface{} {
178-
return &common.UserSignedUp{}
179-
}
180-
181-
func (h AddToSupport8Handler) Handle(ctx context.Context, event interface{}) error {
182-
e := event.(*common.UserSignedUp)
183-
163+
func (h AddToSupport8Handler) Handle(ctx context.Context, e *common.UserSignedUp) error {
184164
fmt.Println("Adding user", e.UserID, "to the support channel")
185165

186166
return nil
187167
}
188168

189169
type AddToCRM9Handler struct{}
190170

191-
func (h AddToCRM9Handler) HandlerName() string {
192-
return "AddToCRM-9"
193-
}
194-
195-
func (h AddToCRM9Handler) NewEvent() interface{} {
196-
return &common.UserSignedUp{}
197-
}
198-
199-
func (h AddToCRM9Handler) Handle(ctx context.Context, event interface{}) error {
200-
e := event.(*common.UserSignedUp)
201-
171+
func (h AddToCRM9Handler) Handle(ctx context.Context, e *common.UserSignedUp) error {
202172
fmt.Println("Adding user", e.UserID, "to the CRM")
203173

204174
return nil
205175
}
206176

207177
type AddToSupport9Handler struct{}
208178

209-
func (h AddToSupport9Handler) HandlerName() string {
210-
return "AddToSupport-9"
211-
}
212-
213-
func (h AddToSupport9Handler) NewEvent() interface{} {
214-
return &common.UserSignedUp{}
215-
}
216-
217-
func (h AddToSupport9Handler) Handle(ctx context.Context, event interface{}) error {
218-
e := event.(*common.UserSignedUp)
219-
179+
func (h AddToSupport9Handler) Handle(ctx context.Context, e *common.UserSignedUp) error {
220180
fmt.Println("Adding user", e.UserID, "to the support channel")
221181

222182
return nil

_examples/real-world-examples/consumer-groups/newsletter-service/main.go

Lines changed: 8 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -313,8 +313,8 @@ func main() {
313313
EventsPublisher: publisher,
314314
EventHandlers: func(commandBus *cqrs.CommandBus, eventBus *cqrs.EventBus) []cqrs.EventHandler {
315315
return []cqrs.EventHandler{
316-
AddToPromotionsList8Handler{},
317-
AddToNewsList8Handler{},
316+
cqrs.NewEventHandler("AddToPromotionsList-8", AddToPromotionsList8Handler{}.Handle),
317+
cqrs.NewEventHandler("AddToNewsList-8", AddToNewsList8Handler{}.Handle),
318318
}
319319
},
320320
EventsSubscriberConstructor: func(handlerName string) (message.Subscriber, error) {
@@ -345,8 +345,8 @@ func main() {
345345
EventsPublisher: publisher,
346346
EventHandlers: func(commandBus *cqrs.CommandBus, eventBus *cqrs.EventBus) []cqrs.EventHandler {
347347
return []cqrs.EventHandler{
348-
AddToPromotionsList9Handler{},
349-
AddToNewsList9Handler{},
348+
cqrs.NewEventHandler("AddToPromotionsList-9", AddToPromotionsList9Handler{}.Handle),
349+
cqrs.NewEventHandler("AddToNewsList-9", AddToNewsList9Handler{}.Handle),
350350
}
351351
},
352352
EventsSubscriberConstructor: func(handlerName string) (message.Subscriber, error) {
@@ -381,13 +381,7 @@ func (h AddToPromotionsList8Handler) HandlerName() string {
381381
return "AddToPromotionsList-8"
382382
}
383383

384-
func (h AddToPromotionsList8Handler) NewEvent() interface{} {
385-
return &common.UserSignedUp{}
386-
}
387-
388-
func (h AddToPromotionsList8Handler) Handle(ctx context.Context, event interface{}) error {
389-
e := event.(*common.UserSignedUp)
390-
384+
func (h AddToPromotionsList8Handler) Handle(ctx context.Context, e *common.UserSignedUp) error {
391385
if !e.Consents.Marketing {
392386
return nil
393387
}
@@ -399,17 +393,7 @@ func (h AddToPromotionsList8Handler) Handle(ctx context.Context, event interface
399393

400394
type AddToNewsList8Handler struct{}
401395

402-
func (h AddToNewsList8Handler) HandlerName() string {
403-
return "AddToNewsList-8"
404-
}
405-
406-
func (h AddToNewsList8Handler) NewEvent() interface{} {
407-
return &common.UserSignedUp{}
408-
}
409-
410-
func (h AddToNewsList8Handler) Handle(ctx context.Context, event interface{}) error {
411-
e := event.(*common.UserSignedUp)
412-
396+
func (h AddToNewsList8Handler) Handle(ctx context.Context, e *common.UserSignedUp) error {
413397
if !e.Consents.News {
414398
return nil
415399
}
@@ -420,17 +404,7 @@ func (h AddToNewsList8Handler) Handle(ctx context.Context, event interface{}) er
420404

421405
type AddToPromotionsList9Handler struct{}
422406

423-
func (h AddToPromotionsList9Handler) HandlerName() string {
424-
return "AddToPromotionsList-9"
425-
}
426-
427-
func (h AddToPromotionsList9Handler) NewEvent() interface{} {
428-
return &common.UserSignedUp{}
429-
}
430-
431-
func (h AddToPromotionsList9Handler) Handle(ctx context.Context, event interface{}) error {
432-
e := event.(*common.UserSignedUp)
433-
407+
func (h AddToPromotionsList9Handler) Handle(ctx context.Context, e *common.UserSignedUp) error {
434408
if !e.Consents.Marketing {
435409
return nil
436410
}
@@ -442,17 +416,7 @@ func (h AddToPromotionsList9Handler) Handle(ctx context.Context, event interface
442416

443417
type AddToNewsList9Handler struct{}
444418

445-
func (h AddToNewsList9Handler) HandlerName() string {
446-
return "AddToNewsList-9"
447-
}
448-
449-
func (h AddToNewsList9Handler) NewEvent() interface{} {
450-
return &common.UserSignedUp{}
451-
}
452-
453-
func (h AddToNewsList9Handler) Handle(ctx context.Context, event interface{}) error {
454-
e := event.(*common.UserSignedUp)
455-
419+
func (h AddToNewsList9Handler) Handle(ctx context.Context, e *common.UserSignedUp) error {
456420
if !e.Consents.News {
457421
return nil
458422
}

0 commit comments

Comments
 (0)