57 lines
2.2 KiB
Go
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
|
|
}
|