registerlogic.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package logic
  2. import (
  3. "context"
  4. "fmt"
  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. var username string
  48. if in.Nickname == "" {
  49. in.Nickname = fmt.Sprintf("用户-%s", in.Phone)
  50. username = fmt.Sprintf("用户-%s", in.Phone)
  51. } else {
  52. username = in.Nickname
  53. }
  54. // 生成一个随机用户名称
  55. // 创建用户
  56. user := &model.User{
  57. Phone: in.Phone,
  58. Password: encryptedPassword,
  59. Salt: salt,
  60. Nickname: in.Nickname,
  61. Sex: int(in.Sex),
  62. Status: 1, // 正常状态
  63. Username: username,
  64. }
  65. err = l.svcCtx.UserModel.Create(l.ctx, user)
  66. if err != nil {
  67. return nil, errorx.NewCodeError(10008, "创建用户失败")
  68. }
  69. // 生成token
  70. token, err := utils.GenerateToken(user.ID)
  71. if err != nil {
  72. return nil, errorx.ErrGenerateToken
  73. }
  74. return &slowwildserver.LoginAndRegisterRsp{
  75. Token: token,
  76. }, nil
  77. }