✨ 新增几大中心功能
This commit is contained in:
68
server/service/app/register.go
Normal file
68
server/service/app/register.go
Normal file
@@ -0,0 +1,68 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"git.echol.cn/loser/Go-Web-Template/server/global"
|
||||
appModel "git.echol.cn/loser/Go-Web-Template/server/model/app"
|
||||
appReq "git.echol.cn/loser/Go-Web-Template/server/model/app/request"
|
||||
"git.echol.cn/loser/Go-Web-Template/server/utils"
|
||||
"github.com/google/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type AppRegisterService struct{}
|
||||
|
||||
var AppRegisterServiceApp = new(AppRegisterService)
|
||||
|
||||
func (s *AppRegisterService) Register(req appReq.PublicRegister, mode RegisterMode) error {
|
||||
username := strings.TrimSpace(req.Username)
|
||||
password := req.Password
|
||||
welcome := strings.TrimSpace(req.WelcomePhrase)
|
||||
|
||||
if username == "" || password == "" || welcome == "" {
|
||||
return errors.New("参数不完整")
|
||||
}
|
||||
if len(welcome) > 255 {
|
||||
return errors.New("欢迎词过长")
|
||||
}
|
||||
if mode == RegisterModeInvite && strings.TrimSpace(req.InviteCode) == "" {
|
||||
return errors.New("邀请码不能为空")
|
||||
}
|
||||
|
||||
return global.GVA_DB.Transaction(func(tx *gorm.DB) error {
|
||||
var existed appModel.AppUser
|
||||
if err := tx.Where("username = ?", username).First(&existed).Error; err == nil {
|
||||
return errors.New("用户名已注册")
|
||||
} else if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return err
|
||||
}
|
||||
|
||||
user := appModel.AppUser{
|
||||
UUID: uuid.New(),
|
||||
Username: username,
|
||||
Password: utils.BcryptHash(password),
|
||||
Enable: 1,
|
||||
}
|
||||
if err := tx.Create(&user).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
profile := appModel.AppUserProfile{
|
||||
AppUserID: user.ID,
|
||||
WelcomePhrase: welcome,
|
||||
NickName: username,
|
||||
}
|
||||
if err := tx.Create(&profile).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if mode == RegisterModeInvite {
|
||||
if _, err := AppInviteCodeServiceApp.ConsumeByPlainCode(tx, req.InviteCode, user.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user