84 lines
3.8 KiB
Go
84 lines
3.8 KiB
Go
package client
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"github.com/topfans/backend/pkg/logger"
|
||
pbCommon "github.com/topfans/backend/pkg/proto/common"
|
||
pbUser "github.com/topfans/backend/pkg/proto/user"
|
||
"go.uber.org/zap"
|
||
)
|
||
|
||
type UserServiceClient interface {
|
||
UpdateCrystalBalance(ctx context.Context, userID, starID int64, delta int64, changeType string, sourceID string, description string) (int64, error)
|
||
GetFanProfile(ctx context.Context, userID, starID int64) (*pbUser.FanProfile, error)
|
||
// AddExhibitionHours 增加用户累计上架时长
|
||
// sourceID: 关联业务ID,用于升级奖励流水的溯源
|
||
// 返回: newLevel, levelDelta, crystalReward, error
|
||
AddExhibitionHours(ctx context.Context, userID, starID int64, hours int64, sourceID string) (int32, int32, 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, changeType string, sourceID string, description string) (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, ChangeType: changeType, SourceId: sourceID, Description: description,
|
||
})
|
||
if err != nil {
|
||
logger.Logger.Error("UserService.UpdateCrystalBalance failed", zap.Error(err))
|
||
return 0, err
|
||
}
|
||
if resp.Base.Code != pbCommon.StatusCode_STATUS_OK {
|
||
logger.Logger.Warn("UpdateCrystalBalance non-zero code", zap.Int32("code", int32(resp.Base.Code)))
|
||
return 0, fmt.Errorf("UpdateCrystalBalance failed with code: %d", resp.Base.Code)
|
||
}
|
||
return resp.NewBalance, nil
|
||
}
|
||
|
||
func (c *userServiceClient) GetFanProfile(ctx context.Context, userID, starID int64) (*pbUser.FanProfile, error) {
|
||
logger.Logger.Debug("Calling UserService.GetFanProfile",
|
||
zap.Int64("user_id", userID), zap.Int64("star_id", starID))
|
||
resp, err := c.client.GetFanProfile(ctx, &pbUser.GetFanProfileRequest{
|
||
UserId: userID,
|
||
StarId: starID,
|
||
})
|
||
if err != nil {
|
||
logger.Logger.Error("UserService.GetFanProfile failed", zap.Error(err))
|
||
return nil, err
|
||
}
|
||
if resp.Base.Code != pbCommon.StatusCode_STATUS_OK {
|
||
logger.Logger.Warn("GetFanProfile non-zero code", zap.Int32("code", int32(resp.Base.Code)))
|
||
return nil, fmt.Errorf("GetFanProfile failed with code: %d", resp.Base.Code)
|
||
}
|
||
return resp.Profile, nil
|
||
}
|
||
|
||
// AddExhibitionHours 增加用户累计上架时长
|
||
func (c *userServiceClient) AddExhibitionHours(ctx context.Context, userID, starID int64, hours int64, sourceID string) (int32, int32, int64, error) {
|
||
logger.Logger.Debug("Calling UserService.AddExhibitionHours",
|
||
zap.Int64("user_id", userID), zap.Int64("star_id", starID), zap.Int64("hours", hours))
|
||
resp, err := c.client.AddExhibitionHours(ctx, &pbUser.AddExhibitionHoursRequest{
|
||
UserId: userID,
|
||
StarId: starID,
|
||
ExhibitionHours: hours,
|
||
SourceId: sourceID,
|
||
})
|
||
if err != nil {
|
||
logger.Logger.Error("UserService.AddExhibitionHours failed", zap.Error(err))
|
||
return 0, 0, 0, err
|
||
}
|
||
if resp.Base.Code != pbCommon.StatusCode_STATUS_OK {
|
||
logger.Logger.Warn("AddExhibitionHours non-zero code", zap.Int32("code", int32(resp.Base.Code)))
|
||
return 0, 0, 0, fmt.Errorf("AddExhibitionHours failed with code: %d", resp.Base.Code)
|
||
}
|
||
return resp.NewLevel, resp.LevelDelta, resp.CrystalReward, nil
|
||
}
|