package account import ( model2 "SciencesServer/app/common/model" "SciencesServer/app/enterprise/model" "SciencesServer/app/handle" "errors" ) type Register struct{} type RegisterHandle func() *Register type ( RegisterRequest struct { Name, Mobile, Captcha, Password, RepeatPass string } ) func (c *RegisterRequest) checkPassword() bool { return c.Password == c.RepeatPass } func (c *RegisterRequest) checkUserExist(mTenantUser *model.TenantUser) (bool, error) { var count int64 if err := model2.Count(mTenantUser.TenantUser, &count, model2.NewWhere("mobile", c.Mobile)); err != nil { return false, err } return count > 0, nil } func (c *RegisterRequest) checkCaptcha() (bool, error) { return handle.NewCaptcha().Validate(&handle.CaptchaSms{Captcha: c.Captcha, Mobile: c.Mobile}) } func (c *Register) Launch(req *RegisterRequest) (*LoginResponse, error) { if req.checkPassword() { return nil, errors.New("两次密码不一致") } mTenantUser := model.NewTenantUser() pass, err := req.checkUserExist(mTenantUser) if err != nil { return nil, err } else if pass { return nil, errors.New("当前手机号码已注册") } if pass, err = req.checkCaptcha(); err != nil { return nil, err } else if !pass { return nil, errors.New("验证码错误或已过期") } mTenantUser.Name = req.Name mTenantUser.Mobile = req.Mobile mTenantUser.Password = req.Password if err = model2.Create(mTenantUser.TenantUser); err != nil { return nil, err } return NewAccount().Login()(mTenantUser), err } func NewRegister() RegisterHandle { return func() *Register { return &Register{} } }