Smart Filter Polish & New Filters (#2283)

This commit is contained in:
Joe Milazzo 2023-09-15 09:39:06 -07:00 committed by GitHub
parent 0d8c081093
commit 45f6fb67d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
23 changed files with 375 additions and 181 deletions

View file

@ -868,8 +868,6 @@ public class SeriesRepository : ISeriesRepository
.HasGenre(hasGenresFilter, FilterComparison.Contains, filter.Genres)
.HasFormat(filter.Formats != null && filter.Formats.Count > 0, FilterComparison.Contains, filter.Formats!)
.HasAverageReadTime(true, FilterComparison.GreaterThanEqual, 0)
// TODO: This needs different treatment
.HasPeople(hasPeopleFilter, FilterComparison.Contains, allPeopleIds)
.WhereIf(onlyParentSeries,
@ -917,6 +915,7 @@ public class SeriesRepository : ISeriesRepository
SortField.LastChapterAdded => query.OrderBy(s => s.LastChapterAdded),
SortField.TimeToRead => query.OrderBy(s => s.AvgHoursToRead),
SortField.ReleaseYear => query.OrderBy(s => s.Metadata.ReleaseYear),
SortField.ReadProgress => query.OrderBy(s => s.Progress.Where(p => p.SeriesId == s.Id).Select(p => p.LastModified).Max()),
_ => query
};
}
@ -930,6 +929,7 @@ public class SeriesRepository : ISeriesRepository
SortField.LastChapterAdded => query.OrderByDescending(s => s.LastChapterAdded),
SortField.TimeToRead => query.OrderByDescending(s => s.AvgHoursToRead),
SortField.ReleaseYear => query.OrderByDescending(s => s.Metadata.ReleaseYear),
SortField.ReadProgress => query.OrderByDescending(s => s.Progress.Where(p => p.SeriesId == s.Id).Select(p => p.LastModified).Max()),
_ => query
};
}
@ -1089,6 +1089,7 @@ public class SeriesRepository : ISeriesRepository
FilterField.Formats => query.HasFormat(true, statement.Comparison, (IList<MangaFormat>) value),
FilterField.ReleaseYear => query.HasReleaseYear(true, statement.Comparison, (int) value),
FilterField.ReadTime => query.HasAverageReadTime(true, statement.Comparison, (int) value),
FilterField.ReadingDate => query.HasReadingDate(true, statement.Comparison, (DateTime) value, userId),
_ => throw new ArgumentOutOfRangeException()
};
}

View file

@ -439,8 +439,8 @@ public class UserRepository : IUserRepository
var filterSeriesQuery = query.Join(_context.Series, b => b.SeriesId, s => s.Id,
(bookmark, series) => new BookmarkSeriesPair()
{
bookmark = bookmark,
series = series
Bookmark = bookmark,
Series = series
});
var filterStatement = filter.Statements.FirstOrDefault(f => f.Field == FilterField.SeriesName);
@ -457,34 +457,34 @@ public class UserRepository : IUserRepository
switch (filterStatement.Comparison)
{
case FilterComparison.Equal:
filterSeriesQuery = filterSeriesQuery.Where(s => s.series.Name.Equals(queryString)
|| s.series.OriginalName.Equals(queryString)
|| s.series.LocalizedName.Equals(queryString)
|| s.series.SortName.Equals(queryString));
filterSeriesQuery = filterSeriesQuery.Where(s => s.Series.Name.Equals(queryString)
|| s.Series.OriginalName.Equals(queryString)
|| s.Series.LocalizedName.Equals(queryString)
|| s.Series.SortName.Equals(queryString));
break;
case FilterComparison.BeginsWith:
filterSeriesQuery = filterSeriesQuery.Where(s => EF.Functions.Like(s.series.Name, $"{queryString}%")
||EF.Functions.Like(s.series.OriginalName, $"{queryString}%")
|| EF.Functions.Like(s.series.LocalizedName, $"{queryString}%")
|| EF.Functions.Like(s.series.SortName, $"{queryString}%"));
filterSeriesQuery = filterSeriesQuery.Where(s => EF.Functions.Like(s.Series.Name, $"{queryString}%")
||EF.Functions.Like(s.Series.OriginalName, $"{queryString}%")
|| EF.Functions.Like(s.Series.LocalizedName, $"{queryString}%")
|| EF.Functions.Like(s.Series.SortName, $"{queryString}%"));
break;
case FilterComparison.EndsWith:
filterSeriesQuery = filterSeriesQuery.Where(s => EF.Functions.Like(s.series.Name, $"%{queryString}")
||EF.Functions.Like(s.series.OriginalName, $"%{queryString}")
|| EF.Functions.Like(s.series.LocalizedName, $"%{queryString}")
|| EF.Functions.Like(s.series.SortName, $"%{queryString}"));
filterSeriesQuery = filterSeriesQuery.Where(s => EF.Functions.Like(s.Series.Name, $"%{queryString}")
||EF.Functions.Like(s.Series.OriginalName, $"%{queryString}")
|| EF.Functions.Like(s.Series.LocalizedName, $"%{queryString}")
|| EF.Functions.Like(s.Series.SortName, $"%{queryString}"));
break;
case FilterComparison.Matches:
filterSeriesQuery = filterSeriesQuery.Where(s => EF.Functions.Like(s.series.Name, $"%{queryString}%")
||EF.Functions.Like(s.series.OriginalName, $"%{queryString}%")
|| EF.Functions.Like(s.series.LocalizedName, $"%{queryString}%")
|| EF.Functions.Like(s.series.SortName, $"%{queryString}%"));
filterSeriesQuery = filterSeriesQuery.Where(s => EF.Functions.Like(s.Series.Name, $"%{queryString}%")
||EF.Functions.Like(s.Series.OriginalName, $"%{queryString}%")
|| EF.Functions.Like(s.Series.LocalizedName, $"%{queryString}%")
|| EF.Functions.Like(s.Series.SortName, $"%{queryString}%"));
break;
case FilterComparison.NotEqual:
filterSeriesQuery = filterSeriesQuery.Where(s => s.series.Name != queryString
|| s.series.OriginalName != queryString
|| s.series.LocalizedName != queryString
|| s.series.SortName != queryString);
filterSeriesQuery = filterSeriesQuery.Where(s => s.Series.Name != queryString
|| s.Series.OriginalName != queryString
|| s.Series.LocalizedName != queryString
|| s.Series.SortName != queryString);
break;
case FilterComparison.MustContains:
case FilterComparison.NotContains:
@ -504,7 +504,7 @@ public class UserRepository : IUserRepository
return await ApplyLimit(filterSeriesQuery
.Sort(filter.SortOptions)
.AsSplitQuery(), filter.LimitTo)
.Select(o => o.bookmark)
.Select(o => o.Bookmark)
.ProjectTo<BookmarkDto>(_mapper.ConfigurationProvider)
.ToListAsync();
}