mirror of
https://github.com/chaitin/MonkeyCode.git
synced 2026-02-02 06:43:23 +08:00
61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
package usecase
|
|
|
|
import (
|
|
"context"
|
|
"slices"
|
|
|
|
"github.com/chaitin/MonkeyCode/backend/domain"
|
|
)
|
|
|
|
type DashboardUsecase struct {
|
|
repo domain.DashboardRepo
|
|
}
|
|
|
|
func NewDashboardUsecase(repo domain.DashboardRepo) domain.DashboardUsecase {
|
|
return &DashboardUsecase{
|
|
repo: repo,
|
|
}
|
|
}
|
|
|
|
func (u *DashboardUsecase) Statistics(ctx context.Context) (*domain.Statistics, error) {
|
|
return u.repo.Statistics(ctx)
|
|
}
|
|
|
|
func (u *DashboardUsecase) CategoryStat(ctx context.Context, req domain.StatisticsFilter) (*domain.CategoryStat, error) {
|
|
return u.repo.CategoryStat(ctx, req)
|
|
}
|
|
|
|
func (u *DashboardUsecase) TimeStat(ctx context.Context, req domain.StatisticsFilter) (*domain.TimeStat, error) {
|
|
return u.repo.TimeStat(ctx, req)
|
|
}
|
|
|
|
func (u *DashboardUsecase) UserStat(ctx context.Context, req domain.StatisticsFilter) (*domain.UserStat, error) {
|
|
return u.repo.UserStat(ctx, req)
|
|
}
|
|
|
|
func (u *DashboardUsecase) UserEvents(ctx context.Context, req domain.StatisticsFilter) ([]*domain.UserEvent, error) {
|
|
return u.repo.UserEvents(ctx, req)
|
|
}
|
|
|
|
func (u *DashboardUsecase) UserCodeRank(ctx context.Context, req domain.StatisticsFilter) ([]*domain.UserCodeRank, error) {
|
|
return u.repo.UserCodeRank(ctx, req)
|
|
}
|
|
|
|
func (u *DashboardUsecase) UserHeatmap(ctx context.Context, userID string) (*domain.UserHeatmapResp, error) {
|
|
rs, err := u.repo.UserHeatmap(ctx, userID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var count int64
|
|
if len(rs) > 0 {
|
|
maxCount := slices.MaxFunc(rs, func(a, b *domain.UserHeatmap) int {
|
|
return int(a.Count - b.Count)
|
|
})
|
|
count = maxCount.Count
|
|
}
|
|
return &domain.UserHeatmapResp{
|
|
MaxCount: count,
|
|
Points: rs,
|
|
}, nil
|
|
}
|