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 }) }