package logic import ( "context" "lone-services/pkg/log" "lone-services/pkg/modelbase" "lone-services/pkg/utils" "lone-services/pkg/validate" user "lone-services/rpc/user/pb" "lone-services/services/user/internal/dao" "lone-services/services/user/internal/model" "lone-services/services/user/internal/svc" "lone-services/services/user/validator" "github.com/zeromicro/go-zero/core/logx" ) type RegisterLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewRegisterLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RegisterLogic { return &RegisterLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *RegisterLogic) Register(in *user.RegisterReq) (*user.Response, error) { var v validator.RegisterValidator if msg := validate.ValidateFromProto(in, &v); msg != utils.StringEmpty { return outResponse(utils.ErrorParams, msg), nil } openid := v.Openid if openid == utils.StringEmpty { openid = "mock_" + utils.MD5Encrypt(v.Mobile+utils.Now().String()) } var exist dao.UserExist err := model.UserModel{}.Init().GetOne(modelbase.Params{ Eq: map[string]string{"openid": openid}, }, &exist) if err != nil { log.Errorf("register check openid: %v", err) return failResponse(utils.Fail), nil } if exist.Id > utils.NumberZero { return failResponse(utils.ErrorExist), nil } encryptMobile, cErr := utils.Crypto{}.AESEncryptECB(v.Mobile) if cErr != nil { log.Errorf("register encrypt mobile: %v", cErr) return failResponse(utils.ErrorEncryptAesError), nil } add := dao.UserCreate{ Openid: openid, Username: v.Username, Nickname: v.Nickname, Avatar: v.Avatar, Mobile: encryptMobile, Gender: uint8(v.Gender), Birthday: v.Birthday, AppId: v.AppId, Status: utils.NumberOne, IsRegistered: utils.NumberOne, IsFaceVerified: utils.NumberTwo, IsProfileCompleted: utils.NumberTwo, OnTrialNum: utils.NumberOne, } err = model.UserModel{}.Init().Create(&add) if err != nil { log.Errorf("register create: %v", err) return failResponse(utils.Fail), nil } session := toSession(dao.UserInfo{ Id: add.Id, Openid: add.Openid, Username: add.Username, Nickname: add.Nickname, Avatar: add.Avatar, Gender: add.Gender, Birthday: add.Birthday, AppId: add.AppId, Status: add.Status, }, v.Mobile) ret := buildToken(session) if status := setLogin(ret.Token, ret.Refresh, session); status.Code != utils.Ok.Code { return failResponse(status), nil } return okResponse(ret), nil }