Less DB trips
This commit is contained in:
parent
8bc792e64a
commit
2da22ae40b
3 changed files with 17 additions and 17 deletions
|
|
@ -167,9 +167,14 @@ public class PersonRepositoryTests : AbstractDbTest
|
||||||
|
|
||||||
foreach (var person in AllPeople) Assert.Contains(fullAccessPeople, ContainsPersonCheck(person));
|
foreach (var person in AllPeople) Assert.Contains(fullAccessPeople, ContainsPersonCheck(person));
|
||||||
|
|
||||||
|
// 1 lib0, 2 Lib1
|
||||||
Assert.Equal(3, fullAccessPeople.First(dto => dto.Id == SharedSeriesChaptersPerson.Id).SeriesCount);
|
Assert.Equal(3, fullAccessPeople.First(dto => dto.Id == SharedSeriesChaptersPerson.Id).SeriesCount);
|
||||||
|
// 2* the above
|
||||||
Assert.Equal(6, fullAccessPeople.First(dto => dto.Id == SharedSeriesChaptersPerson.Id).ChapterCount);
|
Assert.Equal(6, fullAccessPeople.First(dto => dto.Id == SharedSeriesChaptersPerson.Id).ChapterCount);
|
||||||
|
// 1 series in lib0
|
||||||
Assert.Equal(1, fullAccessPeople.First(dto => dto.Id == Lib0SeriesPerson.Id).SeriesCount);
|
Assert.Equal(1, fullAccessPeople.First(dto => dto.Id == Lib0SeriesPerson.Id).SeriesCount);
|
||||||
|
// 2 series in lib1
|
||||||
|
Assert.Equal(2, fullAccessPeople.First(dto => dto.Id == Lib1SeriesPerson.Id).SeriesCount);
|
||||||
|
|
||||||
|
|
||||||
var restrictedAccessPeople =
|
var restrictedAccessPeople =
|
||||||
|
|
@ -186,8 +191,11 @@ public class PersonRepositoryTests : AbstractDbTest
|
||||||
Assert.Contains(restrictedAccessPeople, ContainsPersonCheck(Lib1ChaptersPerson));
|
Assert.Contains(restrictedAccessPeople, ContainsPersonCheck(Lib1ChaptersPerson));
|
||||||
Assert.Contains(restrictedAccessPeople, ContainsPersonCheck(Lib1ChapterAgePerson));
|
Assert.Contains(restrictedAccessPeople, ContainsPersonCheck(Lib1ChapterAgePerson));
|
||||||
|
|
||||||
|
// 2 series in lib1, 0 in lib0
|
||||||
Assert.Equal(2, restrictedAccessPeople.First(dto => dto.Id == SharedSeriesChaptersPerson.Id).SeriesCount);
|
Assert.Equal(2, restrictedAccessPeople.First(dto => dto.Id == SharedSeriesChaptersPerson.Id).SeriesCount);
|
||||||
|
// 2* the above
|
||||||
Assert.Equal(4, restrictedAccessPeople.First(dto => dto.Id == SharedSeriesChaptersPerson.Id).ChapterCount);
|
Assert.Equal(4, restrictedAccessPeople.First(dto => dto.Id == SharedSeriesChaptersPerson.Id).ChapterCount);
|
||||||
|
// Access to both series
|
||||||
Assert.Equal(2, restrictedAccessPeople.First(dto => dto.Id == Lib1SeriesPerson.Id).SeriesCount);
|
Assert.Equal(2, restrictedAccessPeople.First(dto => dto.Id == Lib1SeriesPerson.Id).SeriesCount);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,7 @@ public class PersonRepository : IPersonRepository
|
||||||
public async Task<IEnumerable<PersonRole>> GetRolesForPersonByName(int personId, int userId)
|
public async Task<IEnumerable<PersonRole>> GetRolesForPersonByName(int personId, int userId)
|
||||||
{
|
{
|
||||||
var ageRating = await _context.AppUser.GetUserAgeRestriction(userId);
|
var ageRating = await _context.AppUser.GetUserAgeRestriction(userId);
|
||||||
var userLibs = await _context.Library.GetUserLibraries(userId).ToListAsync();
|
var userLibs = _context.Library.GetUserLibraries(userId);
|
||||||
|
|
||||||
// Query roles from ChapterPeople
|
// Query roles from ChapterPeople
|
||||||
var chapterRoles = await _context.Person
|
var chapterRoles = await _context.Person
|
||||||
|
|
@ -332,7 +332,7 @@ public class PersonRepository : IPersonRepository
|
||||||
{
|
{
|
||||||
var normalized = name.ToNormalized();
|
var normalized = name.ToNormalized();
|
||||||
var ageRating = await _context.AppUser.GetUserAgeRestriction(userId);
|
var ageRating = await _context.AppUser.GetUserAgeRestriction(userId);
|
||||||
var userLibs = await _context.Library.GetUserLibraries(userId).ToListAsync();
|
var userLibs = _context.Library.GetUserLibraries(userId);
|
||||||
|
|
||||||
return await _context.Person
|
return await _context.Person
|
||||||
.Where(p => p.NormalizedName == normalized)
|
.Where(p => p.NormalizedName == normalized)
|
||||||
|
|
@ -382,7 +382,7 @@ public class PersonRepository : IPersonRepository
|
||||||
public async Task<IEnumerable<StandaloneChapterDto>> GetChaptersForPersonByRole(int personId, int userId, PersonRole role)
|
public async Task<IEnumerable<StandaloneChapterDto>> GetChaptersForPersonByRole(int personId, int userId, PersonRole role)
|
||||||
{
|
{
|
||||||
var ageRating = await _context.AppUser.GetUserAgeRestriction(userId);
|
var ageRating = await _context.AppUser.GetUserAgeRestriction(userId);
|
||||||
var userLibs = await _context.Library.GetUserLibraries(userId).ToListAsync();
|
var userLibs = _context.Library.GetUserLibraries(userId);
|
||||||
|
|
||||||
return await _context.ChapterPeople
|
return await _context.ChapterPeople
|
||||||
.Where(cp => cp.PersonId == personId && cp.Role == role)
|
.Where(cp => cp.PersonId == personId && cp.Role == role)
|
||||||
|
|
@ -442,7 +442,7 @@ public class PersonRepository : IPersonRepository
|
||||||
public async Task<IList<PersonDto>> GetAllPersonDtosAsync(int userId, PersonIncludes includes = PersonIncludes.None)
|
public async Task<IList<PersonDto>> GetAllPersonDtosAsync(int userId, PersonIncludes includes = PersonIncludes.None)
|
||||||
{
|
{
|
||||||
var ageRating = await _context.AppUser.GetUserAgeRestriction(userId);
|
var ageRating = await _context.AppUser.GetUserAgeRestriction(userId);
|
||||||
var userLibs = await _context.Library.GetUserLibraries(userId).ToListAsync();
|
var userLibs = _context.Library.GetUserLibraries(userId);
|
||||||
|
|
||||||
return await _context.Person
|
return await _context.Person
|
||||||
.Includes(includes)
|
.Includes(includes)
|
||||||
|
|
@ -456,7 +456,7 @@ public class PersonRepository : IPersonRepository
|
||||||
public async Task<IList<PersonDto>> GetAllPersonDtosByRoleAsync(int userId, PersonRole role, PersonIncludes includes = PersonIncludes.None)
|
public async Task<IList<PersonDto>> GetAllPersonDtosByRoleAsync(int userId, PersonRole role, PersonIncludes includes = PersonIncludes.None)
|
||||||
{
|
{
|
||||||
var ageRating = await _context.AppUser.GetUserAgeRestriction(userId);
|
var ageRating = await _context.AppUser.GetUserAgeRestriction(userId);
|
||||||
var userLibs = await _context.Library.GetUserLibraries(userId).ToListAsync();
|
var userLibs = _context.Library.GetUserLibraries(userId);
|
||||||
|
|
||||||
return await _context.Person
|
return await _context.Person
|
||||||
.Where(p => p.SeriesMetadataPeople.Any(smp => smp.Role == role) || p.ChapterPeople.Any(cp => cp.Role == role)) // Filter by role in both series and chapters
|
.Where(p => p.SeriesMetadataPeople.Any(smp => smp.Role == role) || p.ChapterPeople.Any(cp => cp.Role == role)) // Filter by role in both series and chapters
|
||||||
|
|
|
||||||
|
|
@ -12,33 +12,25 @@ namespace API.Extensions.QueryExtensions;
|
||||||
public static class RestrictByLibraryExtensions
|
public static class RestrictByLibraryExtensions
|
||||||
{
|
{
|
||||||
|
|
||||||
public static IQueryable<Person> RestrictByLibrary(this IQueryable<Person> query, IList<int> userLibs, IList<int> allLibs = null)
|
public static IQueryable<Person> RestrictByLibrary(this IQueryable<Person> query, IQueryable<int> userLibs)
|
||||||
{
|
{
|
||||||
if (allLibs != null && allLibs.Count == userLibs.Count) return query;
|
|
||||||
|
|
||||||
return query.Where(p =>
|
return query.Where(p =>
|
||||||
p.ChapterPeople.Any(cp => userLibs.Contains(cp.Chapter.Volume.Series.LibraryId)) ||
|
p.ChapterPeople.Any(cp => userLibs.Contains(cp.Chapter.Volume.Series.LibraryId)) ||
|
||||||
p.SeriesMetadataPeople.Any(sm => userLibs.Contains(sm.SeriesMetadata.Series.LibraryId)));
|
p.SeriesMetadataPeople.Any(sm => userLibs.Contains(sm.SeriesMetadata.Series.LibraryId)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IQueryable<Chapter> RestrictByLibrary(this IQueryable<Chapter> query, IList<int> userLibs, IList<int> allLibs = null)
|
public static IQueryable<Chapter> RestrictByLibrary(this IQueryable<Chapter> query, IQueryable<int> userLibs)
|
||||||
{
|
{
|
||||||
if (allLibs != null && allLibs.Count == userLibs.Count) return query;
|
|
||||||
|
|
||||||
return query.Where(cp => userLibs.Contains(cp.Volume.Series.LibraryId));
|
return query.Where(cp => userLibs.Contains(cp.Volume.Series.LibraryId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IQueryable<SeriesMetadataPeople> RestrictByLibrary(this IQueryable<SeriesMetadataPeople> query, IList<int> userLibs, IList<int> allLibs = null)
|
public static IQueryable<SeriesMetadataPeople> RestrictByLibrary(this IQueryable<SeriesMetadataPeople> query, IQueryable<int> userLibs)
|
||||||
{
|
{
|
||||||
if (allLibs != null && allLibs.Count == userLibs.Count) return query;
|
|
||||||
|
|
||||||
return query.Where(sm => userLibs.Contains(sm.SeriesMetadata.Series.LibraryId));
|
return query.Where(sm => userLibs.Contains(sm.SeriesMetadata.Series.LibraryId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IQueryable<ChapterPeople> RestrictByLibrary(this IQueryable<ChapterPeople> query, IList<int> userLibs, IList<int> allLibs = null)
|
public static IQueryable<ChapterPeople> RestrictByLibrary(this IQueryable<ChapterPeople> query, IQueryable<int> userLibs)
|
||||||
{
|
{
|
||||||
if (allLibs != null && allLibs.Count == userLibs.Count) return query;
|
|
||||||
|
|
||||||
return query.Where(cp => userLibs.Contains(cp.Chapter.Volume.Series.LibraryId));
|
return query.Where(cp => userLibs.Contains(cp.Chapter.Volume.Series.LibraryId));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue