x
Build docker and publish / build (20.15.1) (push) Successful in 7m36s

This commit is contained in:
2026-03-30 21:05:21 -07:00
parent d351d9e436
commit e0b2be2058
35 changed files with 18692 additions and 116 deletions
+3 -22
View File
@@ -17,12 +17,12 @@ import (
"github.com/google/uuid"
"github.com/hibiken/asynq"
"github.com/perfect-panel/server/internal/model/order"
internaltypes "github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/internal/model/redemption"
"github.com/perfect-panel/server/internal/model/subscribe"
"github.com/perfect-panel/server/internal/model/user"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
internaltypes "github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/tool"
"github.com/perfect-panel/server/pkg/uuidx"
queueTypes "github.com/perfect-panel/server/queue/types"
@@ -223,27 +223,8 @@ func (l *ActivateOrderLogic) NewPurchase(ctx context.Context, orderInfo *order.O
return err
}
// check new user only restriction at activation to prevent concurrent bypass
if orderInfo.Type == OrderTypeSubscribe && sub.Discount != "" {
var dis []internaltypes.SubscribeDiscount
if jsonErr := json.Unmarshal([]byte(sub.Discount), &dis); jsonErr == nil {
newUserOnly := isNewUserOnlyForQuantity(dis, orderInfo.Quantity)
if newUserOnly {
if time.Since(userInfo.CreatedAt) > 24*time.Hour {
return fmt.Errorf("new user only: user %d is not a new user", userInfo.Id)
}
var historyCount int64
if e := l.svc.DB.Model(&order.Order{}).
Where("user_id = ? AND subscribe_id = ? AND type = 1 AND status = ? AND order_no != ?",
orderInfo.UserId, orderInfo.SubscribeId, OrderStatusFinished, orderInfo.OrderNo).
Count(&historyCount).Error; e != nil {
return fmt.Errorf("new user only: check history error: %w", e)
}
if historyCount >= 1 {
return fmt.Errorf("new user only: user %d already activated subscribe %d", userInfo.Id, orderInfo.SubscribeId)
}
}
}
if err = validateNewUserOnlyEligibilityAtActivation(ctx, l.svc.DB, orderInfo, sub); err != nil {
return err
}
var userSub *user.Subscribe