fix(purchase): streamline error handling and improve JSON marshaling for temporary orders
This commit is contained in:
parent
d477ba4772
commit
d5ed82955e
@ -337,7 +337,7 @@ func (l *PurchaseCheckoutLogic) balancePayment(u *user.User, o *order.Order) err
|
|||||||
logger.Field("orderNo", o.OrderNo),
|
logger.Field("orderNo", o.OrderNo),
|
||||||
logger.Field("userId", u.Id),
|
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 {
|
if err != nil {
|
||||||
l.Errorw("[PurchaseCheckout] Update order status error",
|
l.Errorw("[PurchaseCheckout] Update order status error",
|
||||||
logger.Field("error", err.Error()),
|
logger.Field("error", err.Error()),
|
||||||
|
|||||||
@ -6,18 +6,17 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"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/model/order"
|
||||||
"github.com/perfect-panel/server/internal/svc"
|
"github.com/perfect-panel/server/internal/svc"
|
||||||
"github.com/perfect-panel/server/internal/types"
|
"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/logger"
|
||||||
|
"github.com/perfect-panel/server/pkg/payment"
|
||||||
"github.com/perfect-panel/server/pkg/tool"
|
"github.com/perfect-panel/server/pkg/tool"
|
||||||
"github.com/perfect-panel/server/pkg/xerr"
|
"github.com/perfect-panel/server/pkg/xerr"
|
||||||
queue "github.com/perfect-panel/server/queue/types"
|
queue "github.com/perfect-panel/server/queue/types"
|
||||||
|
|
||||||
|
"github.com/hibiken/asynq"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
@ -137,13 +136,15 @@ func (l *PurchaseLogic) Purchase(req *types.PortalPurchaseRequest) (resp *types.
|
|||||||
Password: req.Password,
|
Password: req.Password,
|
||||||
InviteCode: req.InviteCode,
|
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))
|
l.Errorw("[Purchase] Redis set error", logger.Field("error", err.Error()), logger.Field("order_no", orderInfo.OrderNo))
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
l.Infow("[Purchase] Guest order", logger.Field("order_no", orderInfo.OrderNo), logger.Field("identifier", req.Identifier))
|
l.Infow("[Purchase] Guest order", logger.Field("order_no", orderInfo.OrderNo), logger.Field("identifier", req.Identifier))
|
||||||
// save guest order
|
// 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 err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@ -95,7 +95,7 @@ func (l *QueryPurchaseOrderLogic) handleTemporaryOrder(orderInfo *order.Order, r
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Validate user and email
|
// 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
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
package constant
|
package constant
|
||||||
|
|
||||||
import (
|
import "encoding/json"
|
||||||
"encoding/json"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Used for type cloning conversion
|
// Used for type cloning conversion
|
||||||
const (
|
const (
|
||||||
@ -46,7 +44,17 @@ type TemporaryOrderInfo struct {
|
|||||||
InviteCode string `json:"invite_code,omitempty"`
|
InviteCode string `json:"invite_code,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t TemporaryOrderInfo) Marshal() string {
|
func (t *TemporaryOrderInfo) Unmarshal(data []byte) error {
|
||||||
value, _ := json.Marshal(t)
|
type Alias TemporaryOrderInfo
|
||||||
return string(value)
|
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),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -46,11 +46,6 @@ const (
|
|||||||
OrderStatusFinished = 5 // Order successfully completed
|
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
|
// Predefined error variables for common error conditions
|
||||||
var (
|
var (
|
||||||
ErrInvalidOrderStatus = fmt.Errorf("invalid order status")
|
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
|
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()))
|
logger.WithContext(ctx).Error("[ActivateOrderLogic] Process task failed", logger.Field("error", err.Error()))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -282,8 +277,12 @@ func (l *ActivateOrderLogic) getTempOrderInfo(ctx context.Context, orderNo strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
var tempOrder constant.TemporaryOrderInfo
|
var tempOrder constant.TemporaryOrderInfo
|
||||||
if err = json.Unmarshal([]byte(data), &tempOrder); err != nil {
|
if err = tempOrder.Unmarshal([]byte(data)); err != nil {
|
||||||
logger.WithContext(ctx).Error("Unmarshal temp order failed", logger.Field("error", err.Error()))
|
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
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,7 +468,7 @@ func (l *ActivateOrderLogic) Renewal(ctx context.Context, orderInfo *order.Order
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := l.updateSubscriptionForRenewal(ctx, userSub, sub, orderInfo); err != nil {
|
if err = l.updateSubscriptionForRenewal(ctx, userSub, sub, orderInfo); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -623,7 +622,7 @@ func (l *ActivateOrderLogic) Recharge(ctx context.Context, orderInfo *order.Orde
|
|||||||
|
|
||||||
balanceLog := &log.Balance{
|
balanceLog := &log.Balance{
|
||||||
Amount: orderInfo.Price,
|
Amount: orderInfo.Price,
|
||||||
Type: CommissionTypeRecharge,
|
Type: log.BalanceTypeRecharge,
|
||||||
OrderNo: orderInfo.OrderNo,
|
OrderNo: orderInfo.OrderNo,
|
||||||
Balance: userInfo.Balance,
|
Balance: userInfo.Balance,
|
||||||
Timestamp: time.Now().UnixMilli(),
|
Timestamp: time.Now().UnixMilli(),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user