Added series progress/rating information back in. Left attempts at doing via a JOIN or raw SQL.
This commit is contained in:
parent
222959981f
commit
922c0153d3
9 changed files with 269 additions and 7 deletions
|
@ -69,7 +69,174 @@ namespace API.Data
|
|||
var sw = Stopwatch.StartNew();
|
||||
|
||||
|
||||
//
|
||||
// // var query = QueryableExtensions.LeftJoin(_context.Series
|
||||
// // .Join(_context.AppUserProgresses, series => series.Id, progress => progress.SeriesId,
|
||||
// // (series, progress) =>
|
||||
// // new {
|
||||
// // series.LibraryId,
|
||||
// // series.Id,
|
||||
// // series.Created,
|
||||
// // series.Name,
|
||||
// // series.Pages,
|
||||
// // series.Summary,
|
||||
// // series.CoverImage,
|
||||
// // series.OriginalName,
|
||||
// // series.SortName,
|
||||
// // progress.PagesRead
|
||||
// // }), _context.AppUserRating, series => series.Id, rating => rating.SeriesId,
|
||||
// // (series, rating) =>
|
||||
// // new {
|
||||
// // series.LibraryId,
|
||||
// // series.Id,
|
||||
// // series.Created,
|
||||
// // series.Name,
|
||||
// // series.Pages,
|
||||
// // series.Summary,
|
||||
// // series.CoverImage,
|
||||
// // series.OriginalName,
|
||||
// // series.SortName,
|
||||
// // series.PagesRead,
|
||||
// // rating.Review,
|
||||
// // rating.Rating,
|
||||
// // rating.AppUserId
|
||||
// // })
|
||||
// // .Where(s => s.LibraryId == libraryId && s.AppUserId == userId)
|
||||
// // .OrderBy(s => s.SortName)
|
||||
// // .Select(arg => new SeriesDto()
|
||||
// // {
|
||||
// // PagesRead = arg.PagesRead,
|
||||
// // UserRating = arg.Rating,
|
||||
// // UserReview = arg.Review,
|
||||
// // Summary = arg.Summary,
|
||||
// // Name = arg.Name,
|
||||
// // OriginalName = arg.OriginalName,
|
||||
// // SortName = arg.SortName,
|
||||
// // Id = arg.Id,
|
||||
// // Pages = arg.Pages,
|
||||
// // CoverImage = arg.CoverImage
|
||||
// // })
|
||||
// // //.ProjectTo<SeriesDto>(_mapper.ConfigurationProvider)
|
||||
// // .AsNoTracking();
|
||||
//
|
||||
//
|
||||
// // var query2 = _context.Series
|
||||
// // .Join(_context.AppUserProgresses, series => series.Id, progress => progress.SeriesId,
|
||||
// // (series, progress) => new { series, progress}
|
||||
// // /*new
|
||||
// // {
|
||||
// // series.LibraryId,
|
||||
// // series.Id,
|
||||
// // series.Created,
|
||||
// // series.Name,
|
||||
// // series.Pages,
|
||||
// // series.Summary,
|
||||
// // series.CoverImage,
|
||||
// // series.OriginalName,
|
||||
// // series.SortName,
|
||||
// // progress.PagesRead
|
||||
// // }*/)
|
||||
// // .LeftJoin(_context.AppUserRating, series => series.series.Id, rating => rating.SeriesId,
|
||||
// // (series, rating) => new {series.series, series.progress, rating}
|
||||
// // /*
|
||||
// // * new
|
||||
// // {
|
||||
// // series.LibraryId,
|
||||
// // series.Id,
|
||||
// // series.Name,
|
||||
// // series.Pages,
|
||||
// // series.Summary,
|
||||
// // series.CoverImage,
|
||||
// // series.OriginalName,
|
||||
// // series.SortName,
|
||||
// // series.PagesRead,
|
||||
// // rating.Review,
|
||||
// // rating.Rating,
|
||||
// // rating.AppUserId
|
||||
// // }
|
||||
// // */)
|
||||
// // // .Select(arg => new SeriesDto()
|
||||
// // // {
|
||||
// // // // Where is failing because this select changes what we select
|
||||
// // // PagesRead = arg.PagesRead,
|
||||
// // // UserRating = arg.Rating,
|
||||
// // // UserReview = arg.Review,
|
||||
// // // Summary = arg.Summary,
|
||||
// // // Name = arg.Name,
|
||||
// // // OriginalName = arg.OriginalName,
|
||||
// // // SortName = arg.SortName,
|
||||
// // // Id = arg.Id,
|
||||
// // // Pages = arg.Pages,
|
||||
// // // CoverImage = arg.CoverImage,
|
||||
// // // })
|
||||
// .Select(arg => new SeriesDto()
|
||||
// {
|
||||
// // Where is failing because this select changes what we select
|
||||
// LibraryId = arg.series.LibraryId,
|
||||
// PagesRead = arg.progress.PagesRead,
|
||||
// UserRating = arg.rating.Rating,
|
||||
// UserReview = arg.rating.Review,
|
||||
// Summary = arg.series.Summary,
|
||||
// Name = arg.series.Name,
|
||||
// OriginalName = arg.series.OriginalName,
|
||||
// SortName = arg.series.SortName,
|
||||
// Id = arg.series.Id,
|
||||
// Pages = arg.series.Pages,
|
||||
// CoverImage = arg.series.CoverImage,
|
||||
// })
|
||||
// // .Where(s => s.LibraryId == libraryId && s.AppUserId == userId)
|
||||
// // .OrderBy(s => s.SortName)
|
||||
// // .AsNoTracking();
|
||||
//
|
||||
// var query = _context.Series
|
||||
// .FromSqlRaw(@"select S.*, Rating AS UserRating, Review AS UserReview from Series AS S
|
||||
// INNER JOIN AppUserProgresses AS AP ON AP.SeriesId = S.Id AND AP.AppUserId = {0}
|
||||
// LEFT OUTER JOIN AppUserRating AUR on AUR.SeriesId = S.Id AND AUR.AppUserId = {0}
|
||||
// WHERE (S.LibraryId = {1}) AND (AP.AppUserId = {0})
|
||||
// ORDER BY S.SortName", userId, libraryId)
|
||||
// .Select(series => new SeriesDto()
|
||||
// {
|
||||
// // Where is failing because this select changes what we select
|
||||
// PagesRead = series.PagesRead,
|
||||
// UserRating = series.UserRating,
|
||||
// UserReview = arg.rating.Review,
|
||||
// Summary = arg.series.Summary,
|
||||
// Name = arg.series.Name,
|
||||
// OriginalName = arg.series.OriginalName,
|
||||
// SortName = arg.series.SortName,
|
||||
// Id = arg.series.Id,
|
||||
// Pages = arg.series.Pages,
|
||||
// CoverImage = arg.series.CoverImage,
|
||||
// })
|
||||
// .AsNoTracking();
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* select S.*, Rating AS UserRating, Review AS UserReview from Series AS S
|
||||
INNER JOIN AppUserProgresses AS AP ON AP.SeriesId = S.Id AND AP.AppUserId = 1
|
||||
LEFT OUTER JOIN AppUserRating AUR on AUR.SeriesId = S.Id AND AUR.AppUserId = 1;
|
||||
*/
|
||||
|
||||
|
||||
//await AddSeriesModifiers(userId, series);
|
||||
// var userProgress = await _context.AppUserProgresses
|
||||
// .Where(p => p.AppUserId == userId && series.Select(s => s.Id).Contains(p.SeriesId) )
|
||||
// .ToListAsync();
|
||||
//
|
||||
// var userRatings = await _context.AppUserRating
|
||||
// .Where(r => r.AppUserId == userId && series.Select(s => s.Id).Contains(r.SeriesId))
|
||||
// .ToListAsync();
|
||||
//
|
||||
// foreach (var s in series)
|
||||
// {
|
||||
// s.PagesRead = userProgress.Where(p => p.SeriesId == s.Id).Sum(p => p.PagesRead);
|
||||
// var rating = userRatings.SingleOrDefault(r => r.SeriesId == s.Id);
|
||||
// if (rating == null) continue;
|
||||
// s.UserRating = rating.Rating;
|
||||
// s.UserReview = rating.Review;
|
||||
// }
|
||||
|
||||
var query = _context.Series
|
||||
.Where(s => s.LibraryId == libraryId)
|
||||
.OrderBy(s => s.SortName)
|
||||
|
@ -77,10 +244,6 @@ namespace API.Data
|
|||
.AsNoTracking();
|
||||
|
||||
|
||||
// TODO: Refactor this into JOINs
|
||||
//await AddSeriesModifiers(userId, series);
|
||||
|
||||
|
||||
_logger.LogDebug("Processed GetSeriesDtoForLibraryIdAsync in {ElapsedMilliseconds} milliseconds", sw.ElapsedMilliseconds);
|
||||
return await PagedList<SeriesDto>.CreateAsync(query, userParams.PageNumber, userParams.PageSize);
|
||||
}
|
||||
|
@ -222,7 +385,7 @@ namespace API.Data
|
|||
return chapterIds.ToArray();
|
||||
}
|
||||
|
||||
private async Task AddSeriesModifiers(int userId, List<SeriesDto> series)
|
||||
public async Task AddSeriesModifiers(int userId, List<SeriesDto> series)
|
||||
{
|
||||
var userProgress = await _context.AppUserProgresses
|
||||
.Where(p => p.AppUserId == userId && series.Select(s => s.Id).Contains(p.SeriesId))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue