Files
kra-new/internal/service/business/ranking.go
T

41 lines
1.6 KiB
Go

package business
import (
"context"
"kra/internal/biz/business"
"kra/internal/service/dto"
)
type RankingUsecase interface {
List(context.Context, business.RankingKind, business.AnalyticsFilter) (*business.RankingPage, error)
}
type RankingService struct{ uc RankingUsecase }
func NewRankingService(uc *business.RankingUsecase) *RankingService { return &RankingService{uc: uc} }
func rankingItems(rows []*business.RankingItem, kind business.RankingKind) []*dto.RankingItem {
out := make([]*dto.RankingItem, 0, len(rows))
for _, row := range rows {
item := &dto.RankingItem{Rank: row.Rank, ObjectID: row.ObjectID, ObjectName: row.Name, MetricValue: row.Value, MoM: row.MoM, MoMStatus: row.MoMStatus}
if kind != business.BusinessRanking {
source, label := row.SourceDB, business.PlatformName(row.SourceDB)
item.SourceDB, item.SourceDBLabel = &source, &label
}
out = append(out, item)
}
return out
}
func (s *RankingService) List(ctx context.Context, kind business.RankingKind, req *dto.RankingQuery) (*dto.RankingPage, error) {
if req == nil {
return nil, business.ErrAnalyticsInput
}
f, err := analyticsRequest(&dto.AnalyticsQuery{Sources: req.Sources, BeginTime: req.BeginTime, EndTime: req.EndTime})
if err != nil {
return nil, err
}
page, err := s.uc.List(ctx, kind, f)
if err != nil {
return nil, err
}
return &dto.RankingPage{Register: rankingItems(page.Register, kind), Recharge: rankingItems(page.Recharge, kind), PayRate: rankingItems(page.PayRate, kind), Active: rankingItems(page.Active, kind), Begin: page.Begin, End: page.End, Available: page.Available}, nil
}