diff --git a/internal/graph/schema.resolvers.go b/internal/graph/schema.resolvers.go index 3e923696..adbc5f80 100644 --- a/internal/graph/schema.resolvers.go +++ b/internal/graph/schema.resolvers.go @@ -676,10 +676,10 @@ func (r *queryResolver) JobsStatistics(ctx context.Context, filter []*model.JobF // Use request-scoped cache: multiple aliases with same (filter, groupBy) // but different sortBy/page hit the DB only once. if cache := getStatsGroupCache(ctx); cache != nil { - key := statsCacheKey(filter, groupBy) + key := statsCacheKey(filter, groupBy, reqFields) var allStats []*model.JobsStatistics allStats, err = cache.getOrCompute(key, func() ([]*model.JobsStatistics, error) { - return r.Repo.JobsStatsGrouped(ctx, filter, nil, nil, groupBy, nil) + return r.Repo.JobsStatsGrouped(ctx, filter, nil, nil, groupBy, reqFields) }) if err == nil { stats = sortAndPageStats(allStats, sortBy, page) diff --git a/internal/graph/stats_cache.go b/internal/graph/stats_cache.go index 2dbb5ca5..92e8e85b 100644 --- a/internal/graph/stats_cache.go +++ b/internal/graph/stats_cache.go @@ -53,9 +53,9 @@ func getStatsGroupCache(ctx context.Context) *statsGroupCache { return nil } -// cacheKey builds a deterministic string key from filter + groupBy. -func statsCacheKey(filter []*model.JobFilter, groupBy *model.Aggregate) string { - return fmt.Sprintf("%v|%v", filter, *groupBy) +// cacheKey builds a deterministic string key from filter + groupBy + reqFields. +func statsCacheKey(filter []*model.JobFilter, groupBy *model.Aggregate, reqFields map[string]bool) string { + return fmt.Sprintf("%v|%v|%v", filter, *groupBy, reqFields) } // getOrCompute returns cached results for the given key, computing them on