diff --git a/internal/logic/public/portal/purchaseCheckoutLogic.go b/internal/logic/public/portal/purchaseCheckoutLogic.go index c56d407..b0c4994 100644 --- a/internal/logic/public/portal/purchaseCheckoutLogic.go +++ b/internal/logic/public/portal/purchaseCheckoutLogic.go @@ -337,7 +337,7 @@ func (l *PurchaseCheckoutLogic) balancePayment(u *user.User, o *order.Order) err logger.Field("orderNo", o.OrderNo), logger.Field("userId", u.Id), ) - err := l.svcCtx.OrderModel.UpdateOrderStatus(l.ctx, o.OrderNo, 2) + err = l.svcCtx.OrderModel.UpdateOrderStatus(l.ctx, o.OrderNo, 2) if err != nil { l.Errorw("[PurchaseCheckout] Update order status error", logger.Field("error", err.Error()), diff --git a/internal/logic/public/portal/purchaseLogic.go b/internal/logic/public/portal/purchaseLogic.go index 5bc8786..c4431dc 100644 --- a/internal/logic/public/portal/purchaseLogic.go +++ b/internal/logic/public/portal/purchaseLogic.go @@ -6,18 +6,17 @@ import ( "fmt" "time" - "github.com/perfect-panel/server/pkg/payment" - - "github.com/perfect-panel/server/pkg/constant" - - "github.com/hibiken/asynq" "github.com/perfect-panel/server/internal/model/order" "github.com/perfect-panel/server/internal/svc" "github.com/perfect-panel/server/internal/types" + "github.com/perfect-panel/server/pkg/constant" "github.com/perfect-panel/server/pkg/logger" + "github.com/perfect-panel/server/pkg/payment" "github.com/perfect-panel/server/pkg/tool" "github.com/perfect-panel/server/pkg/xerr" queue "github.com/perfect-panel/server/queue/types" + + "github.com/hibiken/asynq" "github.com/pkg/errors" "gorm.io/gorm" ) @@ -137,13 +136,15 @@ func (l *PurchaseLogic) Purchase(req *types.PortalPurchaseRequest) (resp *types. Password: req.Password, InviteCode: req.InviteCode, } - if _, err = l.svcCtx.Redis.Set(l.ctx, fmt.Sprintf(constant.TempOrderCacheKey, orderInfo.OrderNo), tempOrder.Marshal(), CloseOrderTimeMinutes*time.Minute).Result(); err != nil { + content, _ := tempOrder.Marshal() + + if _, err = l.svcCtx.Redis.Set(l.ctx, fmt.Sprintf(constant.TempOrderCacheKey, orderInfo.OrderNo), string(content), CloseOrderTimeMinutes*time.Minute).Result(); err != nil { l.Errorw("[Purchase] Redis set error", logger.Field("error", err.Error()), logger.Field("order_no", orderInfo.OrderNo)) return err } l.Infow("[Purchase] Guest order", logger.Field("order_no", orderInfo.OrderNo), logger.Field("identifier", req.Identifier)) // save guest order - if err := l.svcCtx.OrderModel.Insert(l.ctx, orderInfo, tx); err != nil { + if err = l.svcCtx.OrderModel.Insert(l.ctx, orderInfo, tx); err != nil { return err } return nil diff --git a/internal/logic/public/portal/queryPurchaseOrderLogic.go b/internal/logic/public/portal/queryPurchaseOrderLogic.go index bb1b8c3..d8e4795 100644 --- a/internal/logic/public/portal/queryPurchaseOrderLogic.go +++ b/internal/logic/public/portal/queryPurchaseOrderLogic.go @@ -95,7 +95,7 @@ func (l *QueryPurchaseOrderLogic) handleTemporaryOrder(orderInfo *order.Order, r } // Validate user and email - if err := l.validateUserAndEmail(orderInfo, req.Identifier, req.Identifier); err != nil { + if err = l.validateUserAndEmail(orderInfo, req.AuthType, req.Identifier); err != nil { return "", err } diff --git a/pkg/constant/types.go b/pkg/constant/types.go index ea34b57..a2db39b 100644 --- a/pkg/constant/types.go +++ b/pkg/constant/types.go @@ -1,8 +1,6 @@ package constant -import ( - "encoding/json" -) +import "encoding/json" // Used for type cloning conversion const ( @@ -46,7 +44,17 @@ type TemporaryOrderInfo struct { InviteCode string `json:"invite_code,omitempty"` } -func (t TemporaryOrderInfo) Marshal() string { - value, _ := json.Marshal(t) - return string(value) +func (t *TemporaryOrderInfo) Unmarshal(data []byte) error { + type Alias TemporaryOrderInfo + aux := (*Alias)(t) + return json.Unmarshal(data, aux) +} + +func (t *TemporaryOrderInfo) Marshal() ([]byte, error) { + type Alias TemporaryOrderInfo + return json.Marshal(&struct { + *Alias + }{ + Alias: (*Alias)(t), + }) } diff --git a/queue/logic/order/activateOrderLogic.go b/queue/logic/order/activateOrderLogic.go index cb977e5..50f1f15 100644 --- a/queue/logic/order/activateOrderLogic.go +++ b/queue/logic/order/activateOrderLogic.go @@ -46,11 +46,6 @@ const ( OrderStatusFinished = 5 // Order successfully completed ) -// Commission type constants define the types of commission transactions -const ( - CommissionTypeRecharge = 1 // Commission from balance recharge -) - // Predefined error variables for common error conditions var ( ErrInvalidOrderStatus = fmt.Errorf("invalid order status") @@ -83,7 +78,7 @@ func (l *ActivateOrderLogic) ProcessTask(ctx context.Context, task *asynq.Task) return nil // Log and continue } - if err := l.processOrderByType(ctx, orderInfo); err != nil { + if err = l.processOrderByType(ctx, orderInfo); err != nil { logger.WithContext(ctx).Error("[ActivateOrderLogic] Process task failed", logger.Field("error", err.Error())) return nil } @@ -282,8 +277,12 @@ func (l *ActivateOrderLogic) getTempOrderInfo(ctx context.Context, orderNo strin } var tempOrder constant.TemporaryOrderInfo - if err = json.Unmarshal([]byte(data), &tempOrder); err != nil { - logger.WithContext(ctx).Error("Unmarshal temp order failed", logger.Field("error", err.Error())) + if err = tempOrder.Unmarshal([]byte(data)); err != nil { + logger.WithContext(ctx).Error("Unmarshal temp order cache failed", + logger.Field("error", err.Error()), + logger.Field("cache_key", cacheKey), + logger.Field("data", data), + ) return nil, err } @@ -469,7 +468,7 @@ func (l *ActivateOrderLogic) Renewal(ctx context.Context, orderInfo *order.Order return err } - if err := l.updateSubscriptionForRenewal(ctx, userSub, sub, orderInfo); err != nil { + if err = l.updateSubscriptionForRenewal(ctx, userSub, sub, orderInfo); err != nil { return err } @@ -623,7 +622,7 @@ func (l *ActivateOrderLogic) Recharge(ctx context.Context, orderInfo *order.Orde balanceLog := &log.Balance{ Amount: orderInfo.Price, - Type: CommissionTypeRecharge, + Type: log.BalanceTypeRecharge, OrderNo: orderInfo.OrderNo, Balance: userInfo.Balance, Timestamp: time.Now().UnixMilli(),