package client import ( "context" "github.com/topfans/backend/pkg/logger" pbUser "github.com/topfans/backend/pkg/proto/user" "go.uber.org/zap" ) type UserServiceClient interface { UpdateCrystalBalance(ctx context.Context, userID, starID int64, delta int64) (int64, error) AddExperience(ctx context.Context, userID, starID int64, delta int64) (int64, error) } type userServiceClient struct { client pbUser.UserSocialService } func NewUserServiceClient(client pbUser.UserSocialService) UserServiceClient { return &userServiceClient{client: client} } func (c *userServiceClient) UpdateCrystalBalance(ctx context.Context, userID, starID int64, delta int64) (int64, error) { logger.Logger.Debug("Calling UserService.UpdateCrystalBalance", zap.Int64("user_id", userID), zap.Int64("star_id", starID), zap.Int64("delta", delta)) resp, err := c.client.UpdateCrystalBalance(ctx, &pbUser.UpdateCrystalBalanceRequest{ UserId: userID, StarId: starID, Delta: delta, }) if err != nil { logger.Logger.Error("UserService.UpdateCrystalBalance failed", zap.Error(err)) return 0, err } if resp.Base.Code != 0 { logger.Logger.Warn("UpdateCrystalBalance non-zero code", zap.Int32("code", int32(resp.Base.Code))) return 0, err } return resp.NewBalance, nil } func (c *userServiceClient) AddExperience(ctx context.Context, userID, starID int64, delta int64) (int64, error) { logger.Logger.Debug("Calling UserService.AddExperience", zap.Int64("user_id", userID), zap.Int64("star_id", starID), zap.Int64("delta", delta)) resp, err := c.client.AddExperience(ctx, &pbUser.AddExperienceRequest{ UserId: userID, StarId: starID, Delta: delta, }) if err != nil { logger.Logger.Error("UserService.AddExperience failed", zap.Error(err)) return 0, err } if resp.Base.Code != 0 { logger.Logger.Warn("AddExperience non-zero code", zap.Int32("code", int32(resp.Base.Code))) return 0, err } return resp.NewExperience, nil }