Move queries into DataLayer

This commit is contained in:
Michael Bucari-Tovo 2022-06-08 10:08:18 -06:00
parent 859a8e933c
commit 7d28681b23
4 changed files with 34 additions and 31 deletions

View File

@ -35,5 +35,15 @@ namespace DataLayer
.Include(b => b.SeriesLink).ThenInclude(sb => sb.Series) .Include(b => b.SeriesLink).ThenInclude(sb => sb.Series)
.Include(b => b.ContributorsLink).ThenInclude(c => c.Contributor) .Include(b => b.ContributorsLink).ThenInclude(c => c.Contributor)
.Include(b => b.Category).ThenInclude(c => c.ParentCategory); .Include(b => b.Category).ThenInclude(c => c.ParentCategory);
public static bool IsProduct(this Book book)
=> book.ContentType is not ContentType.Episode and not ContentType.Parent;
public static bool IsEpisodeChild(this Book book)
=> book.ContentType is ContentType.Episode;
public static bool IsEpisodeParent(this Book book)
=> book.ContentType is ContentType.Parent;
} }
} }

View File

@ -41,5 +41,23 @@ namespace DataLayer
.Include(le => le.Book).ThenInclude(b => b.SeriesLink).ThenInclude(sb => sb.Series) .Include(le => le.Book).ThenInclude(b => b.SeriesLink).ThenInclude(sb => sb.Series)
.Include(le => le.Book).ThenInclude(b => b.ContributorsLink).ThenInclude(c => c.Contributor) .Include(le => le.Book).ThenInclude(b => b.ContributorsLink).ThenInclude(c => c.Contributor)
.Include(le => le.Book).ThenInclude(b => b.Category).ThenInclude(c => c.ParentCategory); .Include(le => le.Book).ThenInclude(b => b.Category).ThenInclude(c => c.ParentCategory);
#nullable enable
public static LibraryBook? FindSeriesParent(this IEnumerable<LibraryBook> libraryBooks, LibraryBook seriesEpisode)
{
if (seriesEpisode.Book.SeriesLink is null) return null;
//Parent books will always have exactly 1 SeriesBook due to how
//they are imported in ApiExtended.getChildEpisodesAsync()
return libraryBooks.FirstOrDefault(
lb =>
lb.Book.IsEpisodeParent() &&
seriesEpisode.Book.SeriesLink.Any(
s => s.Series.AudibleSeriesId == lb.Book.SeriesLink.Single().Series.AudibleSeriesId));
}
#nullable disable
public static IEnumerable<LibraryBook> FindChildren(this IEnumerable<LibraryBook> bookList, LibraryBook parent)
=> bookList.Where(lb => lb.Book.SeriesLink?.Any(s => s.Series.AudibleSeriesId == parent.Book.AudibleProductId) == true).ToList();
} }
} }

View File

@ -91,13 +91,13 @@ namespace LibationWinForms.GridView
internal void BindToGrid(List<LibraryBook> dbBooks) internal void BindToGrid(List<LibraryBook> dbBooks)
{ {
var geList = dbBooks.Where(lb => lb.IsProduct()).Select(b => new LibraryBookEntry(b)).Cast<GridEntry>().ToList(); var geList = dbBooks.Where(lb => lb.Book.IsProduct()).Select(b => new LibraryBookEntry(b)).Cast<GridEntry>().ToList();
var episodes = dbBooks.Where(lb => lb.IsEpisodeChild()); var episodes = dbBooks.Where(lb => lb.Book.IsEpisodeChild());
foreach (var parent in dbBooks.Where(lb => lb.IsEpisodeParent())) foreach (var parent in dbBooks.Where(lb => lb.Book.IsEpisodeParent()))
{ {
var seriesEpisodes = episodes.FindChildren(parent).ToList(); var seriesEpisodes = episodes.FindChildren(parent);
if (!seriesEpisodes.Any()) continue; if (!seriesEpisodes.Any()) continue;
@ -132,9 +132,9 @@ namespace LibationWinForms.GridView
{ {
var existingEntry = allEntries.FindByAsin(libraryBook.Book.AudibleProductId); var existingEntry = allEntries.FindByAsin(libraryBook.Book.AudibleProductId);
if (libraryBook.IsProduct()) if (libraryBook.Book.IsProduct())
AddOrUpdateBook(libraryBook, existingEntry); AddOrUpdateBook(libraryBook, existingEntry);
else if(libraryBook.IsEpisodeChild()) else if(libraryBook.Book.IsEpisodeChild())
AddOrUpdateEpisode(libraryBook, existingEntry, seriesEntries, dbBooks); AddOrUpdateEpisode(libraryBook, existingEntry, seriesEntries, dbBooks);
} }

View File

@ -8,9 +8,6 @@ namespace LibationWinForms.GridView
#nullable enable #nullable enable
internal static class QueryExtensions internal static class QueryExtensions
{ {
public static IEnumerable<LibraryBook> FindChildren(this IEnumerable<LibraryBook> bookList, LibraryBook parent)
=> bookList.Where(lb => lb.Book.SeriesLink?.Any(s => s.Series.AudibleSeriesId == parent.Book.AudibleProductId) == true);
public static IEnumerable<LibraryBookEntry> BookEntries(this IEnumerable<GridEntry> gridEntries) public static IEnumerable<LibraryBookEntry> BookEntries(this IEnumerable<GridEntry> gridEntries)
=> gridEntries.OfType<LibraryBookEntry>(); => gridEntries.OfType<LibraryBookEntry>();
@ -23,15 +20,6 @@ namespace LibationWinForms.GridView
public static IEnumerable<SeriesEntry> EmptySeries(this IEnumerable<GridEntry> gridEntries) public static IEnumerable<SeriesEntry> EmptySeries(this IEnumerable<GridEntry> gridEntries)
=> gridEntries.SeriesEntries().Where(i => i.Children.Count == 0); => gridEntries.SeriesEntries().Where(i => i.Children.Count == 0);
public static bool IsProduct(this LibraryBook lb)
=> lb.Book.ContentType is not ContentType.Episode and not ContentType.Parent;
public static bool IsEpisodeChild(this LibraryBook lb)
=> lb.Book.ContentType is ContentType.Episode;
public static bool IsEpisodeParent(this LibraryBook lb)
=> lb.Book.ContentType is ContentType.Parent;
public static SeriesEntry? FindSeriesParent(this IEnumerable<GridEntry> gridEntries, LibraryBook seriesEpisode) public static SeriesEntry? FindSeriesParent(this IEnumerable<GridEntry> gridEntries, LibraryBook seriesEpisode)
{ {
if (seriesEpisode.Book.SeriesLink is null) return null; if (seriesEpisode.Book.SeriesLink is null) return null;
@ -43,19 +31,6 @@ namespace LibationWinForms.GridView
seriesEpisode.Book.SeriesLink.Any( seriesEpisode.Book.SeriesLink.Any(
s => s.Series.AudibleSeriesId == lb.LibraryBook.Book.SeriesLink.Single().Series.AudibleSeriesId)); s => s.Series.AudibleSeriesId == lb.LibraryBook.Book.SeriesLink.Single().Series.AudibleSeriesId));
} }
public static LibraryBook? FindSeriesParent(this IEnumerable<LibraryBook> libraryBooks, LibraryBook seriesEpisode)
{
if (seriesEpisode.Book.SeriesLink is null) return null;
//Parent books will always have exactly 1 SeriesBook due to how
//they are imported in ApiExtended.getChildEpisodesAsync()
return libraryBooks.FirstOrDefault(
lb =>
lb.IsEpisodeParent() &&
seriesEpisode.Book.SeriesLink.Any(
s => s.Series.AudibleSeriesId == lb.Book.SeriesLink.Single().Series.AudibleSeriesId));
}
} }
#nullable disable #nullable disable
} }