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

57 lines
2.2 KiB
Go

package business
import (
"context"
"kra/internal/biz/business"
"kra/internal/service/dto"
"strings"
)
type WorkbenchUsecase interface {
Summary(context.Context, []string) (*business.WorkbenchSummary, error)
Ranks(context.Context, []string, string, business.WorkbenchRankKind) ([]*business.WorkbenchRankRow, error)
}
type WorkbenchService struct{ uc WorkbenchUsecase }
func NewWorkbenchService(uc *business.WorkbenchUsecase) *WorkbenchService {
return &WorkbenchService{uc: uc}
}
func workbenchRequest(req *dto.WorkbenchQuery) ([]string, error) {
if req == nil {
return nil, business.ErrWorkbenchSource
}
return normalizePlatforms(req.Sources)
}
func workbenchCardResponse(card *business.WorkbenchCard) *dto.WorkbenchCard {
return &dto.WorkbenchCard{Value: card.Value, CompareValue: card.CompareValue, ChangeRate: card.ChangeRate, CompareLabel: card.CompareLabel}
}
func (s *WorkbenchService) Summary(ctx context.Context, req *dto.WorkbenchQuery) (*dto.WorkbenchSummary, error) {
sources, err := workbenchRequest(req)
if err != nil {
return nil, err
}
data, err := s.uc.Summary(ctx, sources)
if err != nil {
return nil, err
}
return &dto.WorkbenchSummary{TodayRegister: workbenchCardResponse(data.TodayRegister), TodayActive: workbenchCardResponse(data.TodayActive), TodayPay: workbenchCardResponse(data.TodayPay), MonthPay: workbenchCardResponse(data.MonthPay), ActivePromote: workbenchCardResponse(data.ActivePromote), NewPromote: workbenchCardResponse(data.NewPromote), Available: data.Available}, nil
}
func (s *WorkbenchService) Ranks(ctx context.Context, req *dto.WorkbenchQuery, kind business.WorkbenchRankKind) ([]*dto.WorkbenchRankRow, error) {
sources, err := workbenchRequest(req)
if err != nil {
return nil, err
}
if kind == business.WorkbenchPayHigh && strings.EqualFold(strings.TrimSpace(req.Order), "asc") {
kind = business.WorkbenchPayLow
}
rows, err := s.uc.Ranks(ctx, sources, req.Period, kind)
if err != nil {
return nil, err
}
out := make([]*dto.WorkbenchRankRow, 0, len(rows))
for _, row := range rows {
out = append(out, &dto.WorkbenchRankRow{Rank: row.Rank, SourceDB: row.SourceDB, SourceDBLabel: business.PlatformName(row.SourceDB), PromoteID: row.ID, PromoteName: row.Name, Value: row.Value})
}
return out, nil
}