package user import ( "context" "fmt" "git.echol.cn/loser/lckt/global" "git.echol.cn/loser/lckt/model/user" "git.echol.cn/loser/lckt/model/user/request" "git.echol.cn/loser/lckt/utils/sms" "go.uber.org/zap" "math/rand" "time" ) type UserService struct{} func (u *UserService) GetUserById(id int) (user user.User, err error) { return } // SendCode 发送验证码 func (u *UserService) SendCode(req request.SendCodeReq) (err error) { rdb := global.GVA_REDIS key := fmt.Sprintf("VerifyCode:%s", req.Phone) // 发送频率检查 result, err := rdb.Get(context.Background(), key).Result() if result != "" { global.GVA_LOG.Error("验证码发送过于频繁", zap.String("phone", req.Phone)) return } rand.New(rand.NewSource(time.Now().UnixNano())) verifyCode := fmt.Sprintf("%06v", rand.Int31n(1000000)) if ok := sms.SendSMS(req.Phone, verifyCode); !ok { global.GVA_LOG.Error("发送验证码失败") return } // if err = rdb.Set(context.Background(), key, verifyCode, time.Duration(global.GVA_CONFIG.SMS.ExpireTime)*time.Second).Err(); err != nil { global.GVA_LOG.Error("设置验证码缓存失败", zap.Error(err)) return } return } // Login 用户登录 func (u *UserService) Login(req request.CodeLoginReq) (users user.User, err error) { // 1. 判断用户是否存在 var count int64 err = global.GVA_DB.Model(&user.User{}).Where("phone = ?", req.Phone).Count(&count).Error if err != nil { global.GVA_LOG.Error("查询用户失败", zap.Error(err)) return } // 2. 如果用户不存在,则创建用户 if count == 0 { user := user.User{ Phone: req.Phone, } err = global.GVA_DB.Save(&user).Error if err != nil { global.GVA_LOG.Error("创建用户失败", zap.Error(err)) return } } else { err = global.GVA_DB.Where("phone = ?", req.Phone).First(&users).Error if err != nil { global.GVA_LOG.Error("查询用户失败", zap.Error(err)) return } } return }