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

64 lines
2.6 KiB
Go

package business
import (
"context"
"kra/internal/biz/business"
"kra/internal/service/dto"
)
type ServerAnalysisUsecase interface {
List(context.Context, business.ServerAnalysisFilter, int, int) (*business.ServerAnalysisPage, error)
Servers(context.Context, []string, []string, string, int) ([]*business.ServerOption, error)
}
type ServerAnalysisService struct{ uc ServerAnalysisUsecase }
func NewServerAnalysisService(uc *business.ServerAnalysisUsecase) *ServerAnalysisService {
return &ServerAnalysisService{uc: uc}
}
func serverAnalysisResponse(row *business.ServerAnalysisRow, summary bool) *dto.ServerAnalysisRow {
out := &dto.ServerAnalysisRow{SourceDB: row.SourceDB, SourceDBLabel: business.PlatformName(row.SourceDB), GameName: row.GameName, ServerOptionResponse: dto.ServerOptionResponse{Number: row.ServerNum, Name: row.ServerName, OpenTime: row.OpenTime}, Register: row.Counts.Register, Active: row.Counts.Active, PayUsers: row.Counts.Pay, Pay: row.Pay, ARPU: row.ARPU}
if !summary {
out.GameID = &row.GameID
}
return out
}
func (s *ServerAnalysisService) List(ctx context.Context, req *dto.ServerAnalysisQuery) (*dto.ServerAnalysisPage, error) {
if req == nil {
return nil, business.ErrAnalyticsInput
}
f, err := analyticsRequest(&dto.AnalyticsQuery{Sources: req.Sources, GameNames: req.GameNames, BeginTime: req.BeginTime, EndTime: req.EndTime, SortField: req.SortField, SortOrder: req.SortOrder})
if err != nil {
return nil, err
}
page, err := s.uc.List(ctx, business.ServerAnalysisFilter{AnalyticsFilter: f, ServerNum: req.ServerNum}, req.Page, req.PageSize)
if err != nil {
return nil, err
}
out := &dto.ServerAnalysisPage{Rows: []*dto.ServerAnalysisRow{}, Total: page.Total, Begin: page.Begin, End: page.End, Available: page.Available}
for _, row := range page.Rows {
out.Rows = append(out.Rows, serverAnalysisResponse(row, false))
}
if page.Summary != nil {
out.Summary = serverAnalysisResponse(page.Summary, true)
}
return out, nil
}
func (s *ServerAnalysisService) Servers(ctx context.Context, req *dto.ServerOptionQuery) ([]*dto.ServerOptionResponse, error) {
if req == nil {
return nil, business.ErrAnalyticsInput
}
sources, err := normalizePlatforms(req.Sources)
if err != nil {
return nil, err
}
rows, err := s.uc.Servers(ctx, sources, splitQueryValues(req.GameNames), req.Keyword, req.Limit)
if err != nil {
return nil, err
}
out := make([]*dto.ServerOptionResponse, 0, len(rows))
for _, row := range rows {
out = append(out, &dto.ServerOptionResponse{Number: row.Number, Name: row.Name, OpenTime: row.OpenTime})
}
return out, nil
}