fix: findGiftSubscription 查询已过期的赠送订阅,避免创建重复记录
Some checks failed
Build docker and publish / build (20.15.1) (push) Has been cancelled
Some checks failed
Build docker and publish / build (20.15.1) (push) Has been cancelled
- 改为直接查询 order_id=0 的 user_subscribe 记录 - 不再依赖 QueryUserSubscribe(会过滤掉过期订阅) - 赠送订阅过期后新购也会复用原 token
This commit is contained in:
parent
54dea84b6f
commit
8cee79c331
@ -404,26 +404,19 @@ func (l *ActivateOrderLogic) createUserSubscription(ctx context.Context, orderIn
|
||||
return userSub, nil
|
||||
}
|
||||
|
||||
// findGiftSubscription 查找用户指定套餐的赠送订阅(order_id=0 且状态活跃)
|
||||
// findGiftSubscription 查找用户指定套餐的赠送订阅(order_id=0),包括已过期的
|
||||
// 返回找到的赠送订阅记录,如果没有则返回 nil
|
||||
func (l *ActivateOrderLogic) findGiftSubscription(ctx context.Context, userId int64, subscribeId int64) (*user.Subscribe, error) {
|
||||
// 查询用户所有活跃订阅
|
||||
subs, err := l.svc.UserModel.QueryUserSubscribe(ctx, userId, 0, 1)
|
||||
// 直接查询数据库,查找 order_id=0(赠送)且同套餐的订阅,不限制过期状态
|
||||
var giftSub user.Subscribe
|
||||
err := l.svc.DB.Model(&user.Subscribe{}).
|
||||
Where("user_id = ? AND order_id = 0 AND subscribe_id = ?", userId, subscribeId).
|
||||
Order("created_at DESC").
|
||||
First(&giftSub).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 查找 order_id=0(赠送)且同套餐的订阅
|
||||
for _, s := range subs {
|
||||
if s.OrderId == 0 && s.SubscribeId == subscribeId {
|
||||
// 通过 ID 获取完整的 Subscribe 记录
|
||||
sub, err := l.svc.UserModel.FindOneSubscribe(ctx, s.Id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return sub, nil
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
return &giftSub, nil
|
||||
}
|
||||
|
||||
// extendGiftSubscription 在现有赠送订阅上延长到期时间,保持 token 不变
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user