topfans/backend/services/assetService/provider/ranking_provider.go
2026-04-07 22:29:48 +08:00

92 lines
2.5 KiB
Go

package provider
import (
"context"
"time"
appErrors "github.com/topfans/backend/pkg/errors"
"github.com/topfans/backend/pkg/logger"
pb "github.com/topfans/backend/pkg/proto/ranking"
pbCommon "github.com/topfans/backend/pkg/proto/common"
"github.com/topfans/backend/services/assetService/service"
"go.uber.org/zap"
)
// RankingProvider 排行榜服务Provider实现
// 实现 Triple 协议生成的 RankingServiceHandler 接口
type RankingProvider struct {
rankingService service.RankingService
}
// 确保 RankingProvider 实现了 RankingServiceHandler 接口
var _ pb.RankingServiceHandler = (*RankingProvider)(nil)
// NewRankingProvider 创建排行榜服务Provider实例
func NewRankingProvider(rankingService service.RankingService) *RankingProvider {
return &RankingProvider{
rankingService: rankingService,
}
}
// GetHotRanking 获取热度排行榜
func (p *RankingProvider) GetHotRanking(ctx context.Context, req *pb.GetRankingRequest) (*pb.GetRankingResponse, error) {
logger.Logger.Info("Received GetHotRanking request",
zap.String("dimension", req.Dimension),
zap.Int64("star_id", req.StarId),
zap.Int32("page", req.Page),
zap.Int32("page_size", req.PageSize),
)
// 调用Service层
resp, err := p.rankingService.GetHotRanking(ctx, req)
if err != nil {
logger.Logger.Error("GetHotRanking failed",
zap.Error(err),
)
return &pb.GetRankingResponse{
Base: &pbCommon.BaseResponse{
Code: appErrors.ToStatusCode(err),
Message: err.Error(),
Timestamp: time.Now().UnixMilli(),
},
}, err
}
logger.Logger.Debug("GetHotRanking successful",
zap.Int("items_count", len(resp.Items)),
)
return resp, nil
}
// GetOriginalRanking 获取自制排行榜
func (p *RankingProvider) GetOriginalRanking(ctx context.Context, req *pb.GetRankingRequest) (*pb.GetRankingResponse, error) {
logger.Logger.Info("Received GetOriginalRanking request",
zap.String("dimension", req.Dimension),
zap.Int64("star_id", req.StarId),
zap.Int32("page", req.Page),
zap.Int32("page_size", req.PageSize),
)
// 调用Service层
resp, err := p.rankingService.GetOriginalRanking(ctx, req)
if err != nil {
logger.Logger.Error("GetOriginalRanking failed",
zap.Error(err),
)
return &pb.GetRankingResponse{
Base: &pbCommon.BaseResponse{
Code: appErrors.ToStatusCode(err),
Message: err.Error(),
Timestamp: time.Now().UnixMilli(),
},
}, err
}
logger.Logger.Debug("GetOriginalRanking successful",
zap.Int("items_count", len(resp.Items)),
)
return resp, nil
}