diff --git a/internal/biz/cmb/consume.go b/internal/biz/cmb/consume.go index 6c2c5d0..287b694 100644 --- a/internal/biz/cmb/consume.go +++ b/internal/biz/cmb/consume.go @@ -2,13 +2,14 @@ package cmb import ( "context" + "voucher/internal/biz/bo" ) -func (v *Cmb) OrderConsume(ctx context.Context, orderNo string) (err error) { +func (v *Cmb) OrderConsume(ctx context.Context, order *bo.OrderBo) (err error) { return } -func (v *Cmb) QueryConsume(ctx context.Context, orderNo string) (err error) { +func (v *Cmb) QueryConsume(ctx context.Context, order *bo.OrderBo) (err error) { return } diff --git a/internal/biz/consume.go b/internal/biz/consume.go index 4d11d8a..033fb89 100644 --- a/internal/biz/consume.go +++ b/internal/biz/consume.go @@ -11,6 +11,15 @@ func (v *VoucherBiz) OrderConsume(ctx context.Context, orderNo string) (err erro err = lock.NewMutex(v.rdb.Rdb, time.Second*30).Lock(ctx, fmt.Sprintf("order_consume_%s", orderNo), func(ctx context.Context) error { + order, err := v.OrderRepo.GetByOrderNo(ctx, orderNo) + if err != nil { + return err + } + + if order.Type.IsCmb() { + return v.Cmb.OrderConsume(ctx, order) + } + return nil }) @@ -21,6 +30,15 @@ func (v *VoucherBiz) QueryConsume(ctx context.Context, orderNo string) (err erro err = lock.NewMutex(v.rdb.Rdb, time.Second*30).Lock(ctx, fmt.Sprintf("query_consume_%s", orderNo), func(ctx context.Context) error { + order, err := v.OrderRepo.GetByOrderNo(ctx, orderNo) + if err != nil { + return err + } + + if order.Type.IsCmb() { + return v.Cmb.QueryConsume(ctx, order) + } + return nil }) diff --git a/internal/biz/repo/order.go b/internal/biz/repo/order.go index f608b65..6b8dac2 100644 --- a/internal/biz/repo/order.go +++ b/internal/biz/repo/order.go @@ -7,6 +7,7 @@ import ( type OrderRepo interface { GetByOutBizNo(ctx context.Context, outBizNo string) (*bo.OrderBo, error) + GetByOrderNo(ctx context.Context, orderNo string) (*bo.OrderBo, error) Create(ctx context.Context, req *bo.OrderBo) (*bo.OrderBo, error) GetByID(ctx context.Context, id uint64) (*bo.OrderBo, error) Ing(ctx context.Context, id uint64) error diff --git a/internal/biz/voucher.go b/internal/biz/voucher.go index 853ce70..94eccf1 100644 --- a/internal/biz/voucher.go +++ b/internal/biz/voucher.go @@ -2,20 +2,24 @@ package biz import ( "voucher/internal/biz/cmb" + "voucher/internal/biz/repo" "voucher/internal/data" ) type VoucherBiz struct { - rdb *data.Rdb - Cmb *cmb.Cmb + rdb *data.Rdb + Cmb *cmb.Cmb + OrderRepo repo.OrderRepo } func NewVoucherBiz( rdb *data.Rdb, Cmb *cmb.Cmb, + OrderRepo repo.OrderRepo, ) *VoucherBiz { return &VoucherBiz{ - rdb: rdb, - Cmb: Cmb, + rdb: rdb, + Cmb: Cmb, + OrderRepo: OrderRepo, } } diff --git a/internal/data/repoimpl/order.go b/internal/data/repoimpl/order.go index f886846..5c40cfd 100644 --- a/internal/data/repoimpl/order.go +++ b/internal/data/repoimpl/order.go @@ -82,6 +82,22 @@ func (p *OrderRepoImpl) GetByID(ctx context.Context, id uint64) (*bo.OrderBo, er return p.ToBo(info), nil } +func (p *OrderRepoImpl) GetByOrderNo(ctx context.Context, orderNo string) (*bo.OrderBo, error) { + info := &model.Order{} + + tx := p.DB(ctx).Where(model.Order{OrderNo: orderNo}).Find(&info) + + if tx.Error != nil { + return nil, tx.Error + } + + if tx.RowsAffected == 0 { + return nil, gorm.ErrRecordNotFound + } + + return p.ToBo(info), nil +} + func (p *OrderRepoImpl) Ing(ctx context.Context, id uint64) error { now := time.Now()