feat(用户): 添加新用户注册时激活试用订阅功能
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 8m33s
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 8m33s
在创建邮箱用户时,检查配置是否启用试用订阅功能。若启用,则自动为用户激活试用订阅
This commit is contained in:
parent
63d90fba72
commit
02e76ebcf1
@ -12,6 +12,7 @@ import (
|
||||
"github.com/perfect-panel/server/pkg/constant"
|
||||
"github.com/perfect-panel/server/pkg/jwt"
|
||||
"github.com/perfect-panel/server/pkg/logger"
|
||||
"github.com/perfect-panel/server/pkg/tool"
|
||||
"github.com/perfect-panel/server/pkg/uuidx"
|
||||
"github.com/perfect-panel/server/pkg/xerr"
|
||||
"github.com/pkg/errors"
|
||||
@ -269,17 +270,9 @@ func (l *BindEmailWithVerificationLogic) transferDeviceToEmailUser(deviceUserId,
|
||||
// generateTokenForUser 为指定用户生成JWT token
|
||||
func (l *BindEmailWithVerificationLogic) generateTokenForUser(userId int64) (string, error) {
|
||||
// 生成JWT token
|
||||
now := time.Now().Unix()
|
||||
accessExpire := l.svcCtx.Config.JwtAuth.AccessExpire
|
||||
sessionId := fmt.Sprintf("device_transfer_%d_%d", userId, now)
|
||||
sessionId := uuidx.NewUUID().String()
|
||||
|
||||
// jwtToken, err := jwt.NewJwtToken(
|
||||
// l.svcCtx.Config.JwtAuth.AccessSecret,
|
||||
// now,
|
||||
// accessExpire,
|
||||
// jwt.WithOption("UserId", userId),
|
||||
// jwt.WithOption("SessionId", sessionId),
|
||||
// )
|
||||
jwtToken, err := jwt.NewJwtToken(
|
||||
l.svcCtx.Config.JwtAuth.AccessSecret,
|
||||
time.Now().Unix(),
|
||||
@ -357,6 +350,17 @@ func (l *BindEmailWithVerificationLogic) createEmailUser(email string) (int64, e
|
||||
logger.Field("user_id", newUserId),
|
||||
logger.Field("email", email))
|
||||
|
||||
// 4. 检查是否需要激活试用订阅
|
||||
if l.svcCtx.Config.Register.EnableTrial {
|
||||
if err := l.activeTrial(newUserId, tx); err != nil {
|
||||
l.Errorw("激活试用订阅失败",
|
||||
logger.Field("error", err.Error()),
|
||||
logger.Field("user_id", newUserId))
|
||||
return err
|
||||
}
|
||||
l.Infow("激活试用订阅成功", logger.Field("user_id", newUserId))
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
@ -388,3 +392,53 @@ func (l *BindEmailWithVerificationLogic) clearDeviceRelatedCache(deviceIdentifie
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// activeTrial 为新用户激活试用订阅
|
||||
func (l *BindEmailWithVerificationLogic) activeTrial(userId int64, tx *gorm.DB) error {
|
||||
// 获取试用订阅模板
|
||||
sub, err := l.svcCtx.SubscribeModel.FindOne(l.ctx, l.svcCtx.Config.Register.TrialSubscribe)
|
||||
if err != nil {
|
||||
l.Errorw("获取试用订阅模板失败",
|
||||
logger.Field("user_id", userId),
|
||||
logger.Field("trial_subscribe_id", l.svcCtx.Config.Register.TrialSubscribe),
|
||||
logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
|
||||
// 计算试用期时间
|
||||
startTime := time.Now()
|
||||
expireTime := tool.AddTime(l.svcCtx.Config.Register.TrialTimeUnit, l.svcCtx.Config.Register.TrialTime, startTime)
|
||||
subscribeToken := uuidx.SubscribeToken(fmt.Sprintf("Trial-%v", userId))
|
||||
subscribeUUID := uuidx.NewUUID().String()
|
||||
|
||||
// 创建用户订阅记录
|
||||
userSub := &user.Subscribe{
|
||||
UserId: userId,
|
||||
OrderId: 0,
|
||||
SubscribeId: sub.Id,
|
||||
StartTime: startTime,
|
||||
ExpireTime: expireTime,
|
||||
Traffic: sub.Traffic,
|
||||
Download: 0,
|
||||
Upload: 0,
|
||||
Token: subscribeToken,
|
||||
UUID: subscribeUUID,
|
||||
Status: 1,
|
||||
}
|
||||
|
||||
// 插入订阅记录
|
||||
if err := tx.Create(userSub).Error; err != nil {
|
||||
l.Errorw("插入试用订阅记录失败",
|
||||
logger.Field("user_id", userId),
|
||||
logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
|
||||
l.Infow("试用订阅激活成功",
|
||||
logger.Field("user_id", userId),
|
||||
logger.Field("subscribe_id", sub.Id),
|
||||
logger.Field("expire_time", expireTime),
|
||||
logger.Field("traffic", sub.Traffic))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user