69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
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
|
|
})
|
|
}
|