Switched to use a count query instead of serializing all libraries.

This commit is contained in:
Joseph Milazzo 2025-06-24 07:07:37 -05:00
parent 7c4127f87a
commit ff1cc72c48

View file

@ -173,16 +173,20 @@ public class GenreRepository : IGenreRepository
{ {
var ageRating = await _context.AppUser.GetUserAgeRestriction(userId); var ageRating = await _context.AppUser.GetUserAgeRestriction(userId);
var libs = await _context.Library.Includes(LibraryIncludes.AppUser).ToListAsync(); var allLibrariesCount = await _context.Library.CountAsync();
var userLibs = libs.Where(lib => lib.AppUsers.Any(user => user.Id == userId)) var userLibs = await _context.Library
.Select(lib => lib.Id).ToList(); .Includes(LibraryIncludes.AppUser)
.Where(lib => lib.AppUsers.Any(user => user.Id == userId))
.Select(lib => lib.Id)
.ToListAsync();
var query = _context.Genre.RestrictAgainstAgeRestriction(ageRating); var query = _context.Genre.RestrictAgainstAgeRestriction(ageRating);
IQueryable<BrowseGenreDto> finalQuery; IQueryable<BrowseGenreDto> finalQuery;
if (libs.Count != userLibs.Count)
{
var seriesIds = _context.Series.Where(s => userLibs.Contains(s.LibraryId)).Select(s => s.Id); var seriesIds = _context.Series.Where(s => userLibs.Contains(s.LibraryId)).Select(s => s.Id);
if (allLibrariesCount != userLibs.Count)
{
query = query.Where(s => s.Chapters.Any(cp => seriesIds.Contains(cp.Volume.SeriesId)) || query = query.Where(s => s.Chapters.Any(cp => seriesIds.Contains(cp.Volume.SeriesId)) ||
s.SeriesMetadatas.Any(sm => seriesIds.Contains(sm.SeriesId))); s.SeriesMetadatas.Any(sm => seriesIds.Contains(sm.SeriesId)));