From 3ebcb682db56499cc79ada88e604bad683c3b0ea Mon Sep 17 00:00:00 2001 From: Syed Omair Date: Wed, 19 Mar 2025 03:56:06 +0500 Subject: [PATCH] inefficient way of calling point services --- integration_test/integration_test.go | 2 +- lib/mockgrpc/mockgrpc.go | 2 +- service/user_service/user/user_serivce.go | 35 ++++++++++++----------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/integration_test/integration_test.go b/integration_test/integration_test.go index 5523472..5e78e5c 100644 --- a/integration_test/integration_test.go +++ b/integration_test/integration_test.go @@ -262,5 +262,5 @@ func TestUserAPI(t *testing.T) { assert.Equal(t, "Alice Johnson", user["name"]) assert.Equal(t, float64(30), user["age"]) assert.Equal(t, 60000.0, user["salary"]) - assert.Equal(t, float64(0), user["point"]) + assert.Equal(t, float64(10), user["point"]) } diff --git a/lib/mockgrpc/mockgrpc.go b/lib/mockgrpc/mockgrpc.go index 58fdcfd..9898d15 100644 --- a/lib/mockgrpc/mockgrpc.go +++ b/lib/mockgrpc/mockgrpc.go @@ -18,7 +18,7 @@ type MockPointServiceClient struct { } func (m *MockPointServiceClient) GetUserPoints(ctx context.Context, in *pb.PointRequest) (*pb.PointReply, error) { - return &pb.PointReply{UserPoint: "100"}, nil + return &pb.PointReply{UserPoint: "10"}, nil } func (m *MockPointServiceClient) GetUserListPoints(ctx context.Context, in *pb.UserListRequest) (*pb.UserListPointResponse, error) { mapUserPoints := make(map[string]int32) diff --git a/service/user_service/user/user_serivce.go b/service/user_service/user/user_serivce.go index b7060fc..37e4e66 100644 --- a/service/user_service/user/user_serivce.go +++ b/service/user_service/user/user_serivce.go @@ -3,6 +3,7 @@ package user import ( "context" "fmt" + "strconv" "time" "github.com/syedomair/backend-microservices/lib/container" @@ -63,26 +64,26 @@ func (u *UserService) GetAllUserStatistics(limit, offset int, orderBy, sort stri client := pb.NewPointServerClient(conn) - userIDs := []string{} for _, user := range userList { - userIDs = append(userIDs, user.ID) + u.logger.Debug("fetch user points", zap.String("user_id", user.ID)) + + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + r, err := client.GetUserPoints(ctx, &pb.PointRequest{UserId: user.ID}) + if err != nil { + u.logger.Error("failed to get user points", zap.Error(err), zap.String("userID", user.ID)) + continue + } + u.logger.Debug("user points", zap.String("user_id", user.ID), zap.String("user points", r.GetUserPoint())) + + point, err := strconv.Atoi(r.GetUserPoint()) + if err != nil { + point = 0 + } + user.Point = point } - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) - defer cancel() - - r, err := client.GetUserListPoints(ctx, &pb.UserListRequest{UserIds: userIDs}) - if err != nil { - u.logger.Error("failed to get points for users", zap.Error(err), zap.Any("userIDs", userIDs)) - return err - } - userPoints := r.GetUserPoints() - for k, v := range userPoints { - u.logger.Debug("user points", zap.String("user_id", k), zap.Any("points", v)) - } - - userList = updateUserListWithPoints(userList, userPoints) - return nil })