using LiteCqrs; using Microsoft.EntityFrameworkCore; using TeleWave.Application.Common.Interfaces; namespace TeleWave.Application.Programming.Groups.ListGroups; public sealed class ListGroupsQueryHandler(IAppDbContext dbContext) : IQueryHandler> { public async Task> Handle( ListGroupsQuery query, CancellationToken cancellationToken ) { // Список читает кэш статистики, не пересчитывая его: пересчёт идёт при правке состава и при // открытии карточки. У динамической группы кэш поэтому может отставать от библиотеки — // рядом с цифрами показывается время расчёта (StatsComputedAt), и это честнее, чем гонять // правила всех групп на каждый показ списка. return await dbContext .Groups.AsNoTracking() .OrderBy(g => g.Name) .Select(g => new GroupSummaryDto( g.Id, g.Name, g.Description, g.ItemCount, g.UnitCount, g.TotalDuration.TotalSeconds, g.FilterJson != null, g.Mode, g.StatsComputedAt, g.CreatedAt )) .ToListAsync(cancellationToken); } }