package grpc_server import ( "context" "errors" "fmt" "git.hlsq.asia/mmorpg/service-common/db/redis" "git.hlsq.asia/mmorpg/service-common/net/http/http_resp" "git.hlsq.asia/mmorpg/service-common/proto/rs/grpc_pb" "git.hlsq.asia/mmorpg/service-common/utils" "git.hlsq.asia/mmorpg/service-user/internal/dao/model" "git.hlsq.asia/mmorpg/service-user/internal/dao/repository" "git.hlsq.asia/mmorpg/service-user/internal/wechat" "gorm.io/gorm" ) func (s *Server) PhoneLogin(ctx context.Context, req *grpc_pb.PhoneLoginReq) (*grpc_pb.PhoneLoginResp, error) { userDao := repository.NewUserDao(ctx, redis.GetCacheClient()) user, err := userDao.FindByPhone(req.Phone) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { if user, err = userDao.Create(&model.User{ Phone: req.Phone, }); err != nil { return nil, err } user.Name = fmt.Sprintf("user_%v", user.Sn) _ = userDao.Updates(user) } else { return nil, err } } return &grpc_pb.PhoneLoginResp{ USN: user.Sn, Name: user.Name, }, nil } func (s *Server) WxMiniLogin(ctx context.Context, req *grpc_pb.WxMiniLoginReq) (*grpc_pb.WxMiniLoginResp, error) { session, err := wechat.MiniCode2Session(req.Code) if err != nil { return nil, err } userDao := repository.NewUserDao(ctx, redis.GetCacheClient()) user, err := userDao.FindByWxUnionIDOrOpenID(session.UnionID, session.OpenID) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { if user, err = userDao.Create(&model.User{ WxUnionID: session.UnionID, WxMiniOpenID: session.OpenID, }); err != nil { return nil, err } user.Name = fmt.Sprintf("user_%v", user.Sn) _ = userDao.Updates(user) } else { return nil, err } } return &grpc_pb.WxMiniLoginResp{ USN: user.Sn, Name: user.Name, }, nil } func (s *Server) GetUserInfo(ctx context.Context, req *grpc_pb.GetUserInfoReq) (*grpc_pb.GetUserInfoResp, error) { if !utils.ShouldBindUsn(ctx, &req.USN) { return nil, http_resp.ParamError } userDao := repository.NewUserDao(ctx, redis.GetCacheClient()) user, err := userDao.FindBySn(req.USN) if err != nil { return nil, err } return &grpc_pb.GetUserInfoResp{ USN: user.Sn, Name: user.Name, }, nil }