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/constant"
|
||||||
"github.com/perfect-panel/server/pkg/jwt"
|
"github.com/perfect-panel/server/pkg/jwt"
|
||||||
"github.com/perfect-panel/server/pkg/logger"
|
"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/uuidx"
|
||||||
"github.com/perfect-panel/server/pkg/xerr"
|
"github.com/perfect-panel/server/pkg/xerr"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@ -269,17 +270,9 @@ func (l *BindEmailWithVerificationLogic) transferDeviceToEmailUser(deviceUserId,
|
|||||||
// generateTokenForUser 为指定用户生成JWT token
|
// generateTokenForUser 为指定用户生成JWT token
|
||||||
func (l *BindEmailWithVerificationLogic) generateTokenForUser(userId int64) (string, error) {
|
func (l *BindEmailWithVerificationLogic) generateTokenForUser(userId int64) (string, error) {
|
||||||
// 生成JWT token
|
// 生成JWT token
|
||||||
now := time.Now().Unix()
|
|
||||||
accessExpire := l.svcCtx.Config.JwtAuth.AccessExpire
|
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(
|
jwtToken, err := jwt.NewJwtToken(
|
||||||
l.svcCtx.Config.JwtAuth.AccessSecret,
|
l.svcCtx.Config.JwtAuth.AccessSecret,
|
||||||
time.Now().Unix(),
|
time.Now().Unix(),
|
||||||
@ -357,6 +350,17 @@ func (l *BindEmailWithVerificationLogic) createEmailUser(email string) (int64, e
|
|||||||
logger.Field("user_id", newUserId),
|
logger.Field("user_id", newUserId),
|
||||||
logger.Field("email", email))
|
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
|
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