package analytics import ( "context" bizlive "kra/internal/biz/live" "time" ) type TrendPoint struct { Date string AmountCents int64 } type GiftRank struct { RoomID uint RoomName, AnchorName string Diamonds int64 } type Dashboard struct { RoomTotal, RoomLive, RechargeCents, PaidOrderCount, GiftDiamonds, GiftSendCount, DiamondRateCents int64 RechargeTrend []*TrendPoint GiftRanking []*GiftRank } type Repo interface { Dashboard(context.Context, time.Time, time.Time) (*Dashboard, error) } type Usecase struct { repo Repo streams *bizlive.StreamUsecase } func NewUsecase(repo Repo, streams *bizlive.StreamUsecase) *Usecase { return &Usecase{repo: repo, streams: streams} } func (uc *Usecase) Get(ctx context.Context, from, to time.Time) (*Dashboard, error) { v, err := uc.repo.Dashboard(ctx, from, to) if err != nil { return nil, err } streams, err := uc.streams.List(ctx) if err == nil { v.RoomLive = int64(len(streams)) } return v, nil }