feat: 邮箱规范化(NormalizeEmail)与域名白名单检查(IsEmailDomainWhitelisted)
Build docker and publish / build (20.15.1) (push) Has been cancelled

This commit is contained in:
2026-04-12 18:43:47 -07:00
parent 62cf68b49b
commit 954b19c332
6 changed files with 105 additions and 13 deletions
+15 -10
View File
@@ -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()),