registerlogic.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package logic
  2. import (
  3. "context"
  4. "time"
  5. "slowwild/internal/errorx"
  6. "slowwild/internal/model"
  7. "slowwild/internal/svc"
  8. "slowwild/internal/utils"
  9. "git.banshen.xyz/huangguangrong/slow_wild_protobuff/slowwild/slowwildserver"
  10. "github.com/zeromicro/go-zero/core/logx"
  11. )
  12. type RegisterLogic struct {
  13. ctx context.Context
  14. svcCtx *svc.ServiceContext
  15. logx.Logger
  16. }
  17. func NewRegisterLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RegisterLogic {
  18. return &RegisterLogic{
  19. ctx: ctx,
  20. svcCtx: svcCtx,
  21. Logger: logx.WithContext(ctx),
  22. }
  23. }
  24. // 用户注册
  25. func (l *RegisterLogic) Register(in *slowwildserver.RegisterReq) (*slowwildserver.LoginAndRegisterRsp, error) {
  26. // 参数校验
  27. if in.Phone == "" || in.Password == "" || in.Code == "" {
  28. return nil, errorx.ErrInvalidParam
  29. }
  30. // 检查手机号是否已注册
  31. _, err := l.svcCtx.UserModel.FindOneByPhone(l.ctx, in.Phone)
  32. if err != nil && err != model.ErrNotFound {
  33. return nil, errorx.ErrUserQueryFailed
  34. }
  35. if err == nil {
  36. return nil, errorx.NewCodeError(10007, "手机号已注册")
  37. }
  38. // TODO: 验证验证码
  39. // if !verifyCode(in.Phone, in.Code) {
  40. // return nil, errorx.ErrInvalidCode
  41. // }
  42. // 生成盐值
  43. salt := utils.GenerateSalt()
  44. // 加密密码
  45. encryptedPassword := utils.EncryptPassword(in.Password, salt)
  46. // 创建用户
  47. user := &model.User{
  48. Phone: in.Phone,
  49. Password: encryptedPassword,
  50. Salt: salt,
  51. Nickname: in.Nickname,
  52. Sex: int(in.Sex),
  53. Status: 1, // 正常状态
  54. CreateTime: time.Now(),
  55. UpdateTime: time.Now(),
  56. }
  57. err = l.svcCtx.UserModel.Create(l.ctx, user)
  58. if err != nil {
  59. return nil, errorx.NewCodeError(10008, "创建用户失败")
  60. }
  61. // 生成token
  62. token, err := utils.GenerateToken(user.ID)
  63. if err != nil {
  64. return nil, errorx.ErrGenerateToken
  65. }
  66. return &slowwildserver.LoginAndRegisterRsp{
  67. Token: token,
  68. }, nil
  69. }