✨ 新增几大中心功能
This commit is contained in:
70
server/service/system/public_register.go
Normal file
70
server/service/system/public_register.go
Normal file
@@ -0,0 +1,70 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
|
||||
"git.echol.cn/loser/Go-Web-Template/server/global"
|
||||
sysModel "git.echol.cn/loser/Go-Web-Template/server/model/system"
|
||||
systemReq "git.echol.cn/loser/Go-Web-Template/server/model/system/request"
|
||||
"git.echol.cn/loser/Go-Web-Template/server/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type PublicRegisterService struct{}
|
||||
|
||||
var PublicRegisterServiceApp = new(PublicRegisterService)
|
||||
|
||||
func (s *PublicRegisterService) Register(_ *gin.Context, req systemReq.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 sysModel.SysUser
|
||||
if err := tx.Where("username = ?", username).First(&existed).Error; err == nil {
|
||||
return errors.New("用户名已注册")
|
||||
} else if !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return err
|
||||
}
|
||||
|
||||
user := sysModel.SysUser{
|
||||
UUID: uuid.New(),
|
||||
Username: username,
|
||||
Password: utils.BcryptHash(password),
|
||||
NickName: username,
|
||||
WelcomePhrase: welcome,
|
||||
AuthorityId: 9528, // 用户已选择:注册用户默认绑定现有 9528 角色
|
||||
Enable: 1,
|
||||
}
|
||||
if err := tx.Create(&user).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if mode == RegisterModeInvite {
|
||||
if _, err := InviteCodeServiceApp.ConsumeByPlainCode(tx, req.InviteCode, user.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Authorities 关联:保持与原系统一致,给用户绑定其 AuthorityId 对应角色
|
||||
if err := tx.Model(&user).Association("Authorities").Replace([]sysModel.SysAuthority{{AuthorityId: user.AuthorityId}}); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user