From c429de227a7968f7f584b232add7f1e978a2e320 Mon Sep 17 00:00:00 2001
From: Pengfei Jiang <jiangpengfei12@gmail.com>
Date: Thu, 7 Dec 2023 09:35:53 +0800
Subject: [PATCH] fix: fix example (#17)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: 江鹏飞 <jiangpengfei.jiangpf@bytedance.com>
---
 .../event_handler/order_created.go            | 12 ++++++++++--
 .../event_handler/sale_item_added.go          | 19 ++++++++++++-------
 example/biz/sale/domain/order.go              | 12 +++++++++++-
 example/main.go                               |  5 +++++
 4 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/example/biz/sale/application/event_handler/order_created.go b/example/biz/sale/application/event_handler/order_created.go
index 22a6b16..eaef126 100644
--- a/example/biz/sale/application/event_handler/order_created.go
+++ b/example/biz/sale/application/event_handler/order_created.go
@@ -16,16 +16,24 @@
 package event_handler
 
 import (
+	"context"
+
 	ddd "github.com/bytedance/dddfirework"
 	"github.com/bytedance/dddfirework/example/common/domain_event/sale"
 )
 
+// OnOrderCreatedHandler 实现了 ICommandMain 的接口
 type OnOrderCreatedHandler struct {
-	ddd.Command
-
 	event *sale.OrderCreatedEvent
 }
 
+func (h *OnOrderCreatedHandler) Main(ctx context.Context, repo *ddd.Repository) (err error) {
+	// handle order created event here
+	logger.Info("order created")
+
+	return nil
+}
+
 func NewOnOrderCreatedHandler(evt *sale.OrderCreatedEvent) *OnOrderCreatedHandler {
 	return &OnOrderCreatedHandler{
 		event: evt,
diff --git a/example/biz/sale/application/event_handler/sale_item_added.go b/example/biz/sale/application/event_handler/sale_item_added.go
index 29bb203..625a449 100644
--- a/example/biz/sale/application/event_handler/sale_item_added.go
+++ b/example/biz/sale/application/event_handler/sale_item_added.go
@@ -16,18 +16,23 @@
 package event_handler
 
 import (
+	"context"
+
 	ddd "github.com/bytedance/dddfirework"
 	"github.com/bytedance/dddfirework/example/common/domain_event/sale"
+	"github.com/bytedance/dddfirework/logger/stdr"
 )
 
-type OnSaleItemAddedHandler struct {
-	ddd.Command
+var logger = stdr.NewStdr("handler")
+
+// OnSaleItemAddedHandler 是 MainFunc 类型
+func OnSaleItemAddedHandler(ctx context.Context, repo *ddd.Repository) (err error) {
+	// handle sale item added event here
+	logger.Info("sale item added")
 
-	event *sale.OrderSaleItemAddedEvent
+	return nil
 }
 
-func NewOnSaleItemAddedHandler(evt *sale.OrderSaleItemAddedEvent) *OnSaleItemAddedHandler {
-	return &OnSaleItemAddedHandler{
-		event: evt,
-	}
+func NewOnSaleItemAddedHandler(evt *sale.OrderSaleItemAddedEvent) ddd.MainFunc {
+	return OnSaleItemAddedHandler
 }
diff --git a/example/biz/sale/domain/order.go b/example/biz/sale/domain/order.go
index d92512a..5d81278 100644
--- a/example/biz/sale/domain/order.go
+++ b/example/biz/sale/domain/order.go
@@ -28,7 +28,15 @@ type RuleEngine interface {
 	Validate(order *Order, rule string) error
 }
 
-var ruler RuleEngine
+var ruler OrderRuleEngine
+
+type OrderRuleEngine struct {
+}
+
+func (o *OrderRuleEngine) Validate(order *Order, rule string) error {
+	// validate here
+	return nil
+}
 
 type UpdateOrderOpt struct {
 	Remark *string
@@ -147,6 +155,8 @@ func (o *Order) AddCoupon(couponID, rule string, discount int64) error {
 		CouponID: couponID,
 		Rule:     rule,
 		Discount: discount,
+
+		order: o,
 	})
 	if invalid := o.fixCoupons(); len(invalid) > 0 {
 		return fmt.Errorf("coupon invalid")
diff --git a/example/main.go b/example/main.go
index adc491b..f8b8a3e 100644
--- a/example/main.go
+++ b/example/main.go
@@ -36,6 +36,11 @@ import (
 )
 
 func initPO(db *gorm.DB) {
+	// 可选,如果使用 mysql 实现 eventbus,需要提前建表。
+	if err := db.AutoMigrate(&db_eventbus.EventPO{}, &db_eventbus.Transaction{}, &db_eventbus.ServicePO{}); err != nil {
+		panic(err)
+	}
+
 	if err := db.AutoMigrate(&po.OrderPO{}, &po.CouponPO{}, &po.SaleItemPO{}); err != nil {
 		panic(err)
 	}
-- 
GitLab