64 lines
2.6 KiB
Go
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
|
|
}
|