feat: 邮箱规范化(NormalizeEmail)与域名白名单检查(IsEmailDomainWhitelisted)
Build docker and publish / build (20.15.1) (push) Has been cancelled
Build docker and publish / build (20.15.1) (push) Has been cancelled
This commit is contained in:
@@ -500,13 +500,13 @@ func (l *ActivateOrderLogic) patchOrderParentID(ctx context.Context, orderID int
|
||||
return l.svc.DB.WithContext(ctx).Model(&order.Order{}).Where("id = ? AND (parent_id = 0 OR parent_id IS NULL)", orderID).Update("parent_id", parentID).Error
|
||||
}
|
||||
|
||||
// findGiftSubscription 查找用户指定套餐的赠送订阅(order_id=0),包括已过期的
|
||||
// 返回找到的赠送订阅记录,如果没有则返回 nil
|
||||
func (l *ActivateOrderLogic) findGiftSubscription(ctx context.Context, userId int64, subscribeId int64) (*user.Subscribe, error) {
|
||||
// 直接查询数据库,查找 order_id=0(赠送)且同套餐的订阅,不限制过期状态
|
||||
// findGiftSubscription 查找用户的赠送订阅(order_id=0),包括已过期的。
|
||||
// 单订阅模式下,用户若以不同套餐首次购买,需要将赠送订阅合并为付费订阅,
|
||||
// 因此不再过滤 subscribe_id,避免套餐不同时绕过合并路径创建重复订阅。
|
||||
func (l *ActivateOrderLogic) findGiftSubscription(ctx context.Context, userId int64, _ int64) (*user.Subscribe, error) {
|
||||
var giftSub user.Subscribe
|
||||
err := l.svc.DB.Model(&user.Subscribe{}).
|
||||
Where("user_id = ? AND order_id = 0 AND subscribe_id = ?", userId, subscribeId).
|
||||
Where("user_id = ? AND order_id = 0", userId).
|
||||
Order("created_at DESC").
|
||||
First(&giftSub).Error
|
||||
if err != nil {
|
||||
@@ -515,23 +515,28 @@ func (l *ActivateOrderLogic) findGiftSubscription(ctx context.Context, userId in
|
||||
return &giftSub, nil
|
||||
}
|
||||
|
||||
// extendGiftSubscription 在现有赠送订阅上延长到期时间,保持 token 不变
|
||||
// 将购买的天数叠加到赠送订阅的到期时间上,并更新 order_id 为新订单 ID
|
||||
// extendGiftSubscription 在现有赠送订阅上延长到期时间,保持 token/UUID 不变。
|
||||
// 若购买套餐与赠送套餐不同,同步更新套餐 ID 和流量配额并重置已用量(套餐变更语义)。
|
||||
func (l *ActivateOrderLogic) extendGiftSubscription(ctx context.Context, giftSub *user.Subscribe, orderInfo *order.Order, sub *subscribe.Subscribe) (*user.Subscribe, error) {
|
||||
now := time.Now()
|
||||
// 计算基准时间:取赠送订阅到期时间和当前时间的较大值
|
||||
baseTime := giftSub.ExpireTime
|
||||
if baseTime.Before(now) {
|
||||
baseTime = now
|
||||
}
|
||||
// 在基准时间上增加购买的天数
|
||||
newExpireTime := tool.AddTime(sub.UnitTime, orderInfo.Quantity, baseTime)
|
||||
|
||||
// 更新赠送订阅的信息
|
||||
giftSub.OrderId = orderInfo.Id
|
||||
giftSub.ExpireTime = newExpireTime
|
||||
giftSub.Status = 1
|
||||
|
||||
// 套餐变更:更新套餐 ID 和流量配额,重置已用流量(与 updateSubscriptionForRenewal 逻辑一致)
|
||||
if giftSub.SubscribeId != orderInfo.SubscribeId {
|
||||
giftSub.SubscribeId = orderInfo.SubscribeId
|
||||
giftSub.Traffic = sub.Traffic
|
||||
giftSub.Download = 0
|
||||
giftSub.Upload = 0
|
||||
}
|
||||
|
||||
if err := l.svc.UserModel.UpdateSubscribe(ctx, giftSub); err != nil {
|
||||
logger.WithContext(ctx).Error("Update gift subscription failed",
|
||||
logger.Field("error", err.Error()),
|
||||
|
||||
Reference in New Issue
Block a user