Enhance query performance by applying AsSplitQuery to multiple handlers and loaders for Channels and ScheduleTemplates, improving efficiency in data retrieval and reducing unnecessary data duplication in queries.
ci / build-backend (push) Successful in 1m26s
ci / build-frontend (push) Successful in 49s
ci / tests (push) Successful in 4m18s
ci / sonar (push) Failing after 2m31s

This commit is contained in:
Leonid Pershin
2026-07-26 21:50:01 +03:00
parent b52080e026
commit c4c93cff02
14 changed files with 25 additions and 0 deletions
@@ -18,6 +18,8 @@ public sealed class GetShowQueryHandler(IAppDbContext dbContext)
.Shows.AsNoTracking()
.Include(s => s.Episodes)
.Include(s => s.Genres)
// Сиблинги: серии × жанры перемножились бы в одном запросе (см. ListShowsQueryHandler).
.AsSplitQuery()
.FirstOrDefaultAsync(s => s.Id == query.Id, cancellationToken);
if (show is null)
return Result.Failure<ShowDto>(ShowErrors.NotFound);
@@ -17,6 +17,9 @@ public sealed class ListShowsQueryHandler(IAppDbContext dbContext)
.Shows.AsNoTracking()
.Include(s => s.Episodes)
.Include(s => s.Genres)
// Серии и жанры — сиблинги: одним запросом это честное перемножение (сериал на 200 серий
// с тремя жанрами даёт 600 строк вместо 203). Разделяем.
.AsSplitQuery()
.Where(s =>
query.Interstitials
? s.Kind == ShowKind.Interstitial