41 lines
1.6 KiB
Go
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
|
|
}
|