From cddd58a2482bf3b13e436a58a5107e1ba4b5afe2 Mon Sep 17 00:00:00 2001
From: Alex Tan <8013458+senpai-notices@users.noreply.github.com>
Date: Sun, 15 Oct 2023 02:54:46 +1100
Subject: [PATCH] Use new Queryable extension method DoOrderBy() for cleaner
code (#2307)
---
API/Data/Repositories/SeriesRepository.cs | 37 +++++------------
.../QueryExtensions/Filtering/BookmarkSort.cs | 38 +++++-------------
.../QueryExtensions/Filtering/SeriesSort.cs | 40 +++++--------------
.../QueryExtensions/QueryableExtensions.cs | 13 ++++++
4 files changed, 45 insertions(+), 83 deletions(-)
diff --git a/API/Data/Repositories/SeriesRepository.cs b/API/Data/Repositories/SeriesRepository.cs
index 03b7dd38e..6ab896688 100644
--- a/API/Data/Repositories/SeriesRepository.cs
+++ b/API/Data/Repositories/SeriesRepository.cs
@@ -903,34 +903,17 @@ public class SeriesRepository : ISeriesRepository
SortField = SortField.SortName
};
- if (filter.SortOptions.IsAscending)
+ query = filter.SortOptions.SortField switch
{
- query = filter.SortOptions.SortField switch
- {
- SortField.SortName => query.OrderBy(s => s.SortName.ToLower()),
- SortField.CreatedDate => query.OrderBy(s => s.Created),
- SortField.LastModifiedDate => query.OrderBy(s => s.LastModified),
- 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
- };
- }
- else
- {
- query = filter.SortOptions.SortField switch
- {
- SortField.SortName => query.OrderByDescending(s => s.SortName.ToLower()),
- SortField.CreatedDate => query.OrderByDescending(s => s.Created),
- SortField.LastModifiedDate => query.OrderByDescending(s => s.LastModified),
- 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
- };
- }
+ SortField.SortName => query.DoOrderBy(s => s.SortName.ToLower(), filter.SortOptions),
+ SortField.CreatedDate => query.DoOrderBy(s => s.Created, filter.SortOptions),
+ SortField.LastModifiedDate => query.DoOrderBy(s => s.LastModified, filter.SortOptions),
+ SortField.LastChapterAdded => query.DoOrderBy(s => s.LastChapterAdded, filter.SortOptions),
+ SortField.TimeToRead => query.DoOrderBy(s => s.AvgHoursToRead, filter.SortOptions),
+ SortField.ReleaseYear => query.DoOrderBy(s => s.Metadata.ReleaseYear, filter.SortOptions),
+ SortField.ReadProgress => query.DoOrderBy(s => s.Progress.Where(p => p.SeriesId == s.Id).Select(p => p.LastModified).Max(), filter.SortOptions),
+ _ => query
+ };
return query.AsSplitQuery();
}
diff --git a/API/Extensions/QueryExtensions/Filtering/BookmarkSort.cs b/API/Extensions/QueryExtensions/Filtering/BookmarkSort.cs
index dec7e7c4f..ed4f300a0 100644
--- a/API/Extensions/QueryExtensions/Filtering/BookmarkSort.cs
+++ b/API/Extensions/QueryExtensions/Filtering/BookmarkSort.cs
@@ -1,6 +1,7 @@
using System.Linq;
using API.DTOs.Filtering;
using API.Entities;
+using API.Extensions.QueryExtensions;
namespace API.Extensions.QueryExtensions.Filtering;
@@ -27,34 +28,17 @@ public static class BookmarkSort
SortField = SortField.SortName
};
- if (sortOptions.IsAscending)
+ query = sortOptions.SortField switch
{
- query = sortOptions.SortField switch
- {
- SortField.SortName => query.OrderBy(s => s.Series.SortName.ToLower()),
- SortField.CreatedDate => query.OrderBy(s => s.Series.Created),
- SortField.LastModifiedDate => query.OrderBy(s => s.Series.LastModified),
- SortField.LastChapterAdded => query.OrderBy(s => s.Series.LastChapterAdded),
- SortField.TimeToRead => query.OrderBy(s => s.Series.AvgHoursToRead),
- SortField.ReleaseYear => query.OrderBy(s => s.Series.Metadata.ReleaseYear),
- SortField.ReadProgress => query.OrderBy(s => s.Series.Progress.Where(p => p.SeriesId == s.Series.Id).Select(p => p.LastModified).Max()),
- _ => query
- };
- }
- else
- {
- query = sortOptions.SortField switch
- {
- SortField.SortName => query.OrderByDescending(s => s.Series.SortName.ToLower()),
- SortField.CreatedDate => query.OrderByDescending(s => s.Series.Created),
- SortField.LastModifiedDate => query.OrderByDescending(s => s.Series.LastModified),
- SortField.LastChapterAdded => query.OrderByDescending(s => s.Series.LastChapterAdded),
- SortField.TimeToRead => query.OrderByDescending(s => s.Series.AvgHoursToRead),
- SortField.ReleaseYear => query.OrderByDescending(s => s.Series.Metadata.ReleaseYear),
- SortField.ReadProgress => query.OrderByDescending(s => s.Series.Progress.Where(p => p.SeriesId == s.Series.Id).Select(p => p.LastModified).Max()),
- _ => query
- };
- }
+ SortField.SortName => query.DoOrderBy(s => s.Series.SortName.ToLower(), sortOptions),
+ SortField.CreatedDate => query.DoOrderBy(s => s.Series.Created, sortOptions),
+ SortField.LastModifiedDate => query.DoOrderBy(s => s.Series.LastModified, sortOptions),
+ SortField.LastChapterAdded => query.DoOrderBy(s => s.Series.LastChapterAdded, sortOptions),
+ SortField.TimeToRead => query.DoOrderBy(s => s.Series.AvgHoursToRead, sortOptions),
+ SortField.ReleaseYear => query.DoOrderBy(s => s.Series.Metadata.ReleaseYear, sortOptions),
+ SortField.ReadProgress => query.DoOrderBy(s => s.Series.Progress.Where(p => p.SeriesId == s.Series.Id).Select(p => p.LastModified).Max(), sortOptions),
+ _ => query
+ };
return query;
}
diff --git a/API/Extensions/QueryExtensions/Filtering/SeriesSort.cs b/API/Extensions/QueryExtensions/Filtering/SeriesSort.cs
index b7eabcd6b..1fdc0111c 100644
--- a/API/Extensions/QueryExtensions/Filtering/SeriesSort.cs
+++ b/API/Extensions/QueryExtensions/Filtering/SeriesSort.cs
@@ -1,8 +1,7 @@
using System.Linq;
using API.DTOs.Filtering;
using API.Entities;
-
-namespace API.Extensions.QueryExtensions.Filtering;
+using API.Extensions.QueryExtensions;
public static class SeriesSort
{
@@ -21,34 +20,17 @@ public static class SeriesSort
SortField = SortField.SortName
};
- if (sortOptions.IsAscending)
+ query = sortOptions.SortField switch
{
- query = sortOptions.SortField switch
- {
- SortField.SortName => query.OrderBy(s => s.SortName.ToLower()),
- SortField.CreatedDate => query.OrderBy(s => s.Created),
- SortField.LastModifiedDate => query.OrderBy(s => s.LastModified),
- 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
- };
- }
- else
- {
- query = sortOptions.SortField switch
- {
- SortField.SortName => query.OrderByDescending(s => s.SortName.ToLower()),
- SortField.CreatedDate => query.OrderByDescending(s => s.Created),
- SortField.LastModifiedDate => query.OrderByDescending(s => s.LastModified),
- 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
- };
- }
+ SortField.SortName => query.DoOrderBy(s => s.SortName.ToLower(), sortOptions),
+ SortField.CreatedDate => query.DoOrderBy(s => s.Created, sortOptions),
+ SortField.LastModifiedDate => query.DoOrderBy(s => s.LastModified, sortOptions),
+ SortField.LastChapterAdded => query.DoOrderBy(s => s.LastChapterAdded, sortOptions),
+ SortField.TimeToRead => query.DoOrderBy(s => s.AvgHoursToRead, sortOptions),
+ SortField.ReleaseYear => query.DoOrderBy(s => s.Metadata.ReleaseYear, sortOptions),
+ SortField.ReadProgress => query.DoOrderBy(s => s.Progress.Where(p => p.SeriesId == s.Id).Select(p => p.LastModified).Max(), sortOptions),
+ _ => query
+ };
return query;
}
diff --git a/API/Extensions/QueryExtensions/QueryableExtensions.cs b/API/Extensions/QueryExtensions/QueryableExtensions.cs
index c01297d3e..eca302203 100644
--- a/API/Extensions/QueryExtensions/QueryableExtensions.cs
+++ b/API/Extensions/QueryExtensions/QueryableExtensions.cs
@@ -5,6 +5,7 @@ using System.Linq.Expressions;
using System.Threading.Tasks;
using API.Data.Misc;
using API.Data.Repositories;
+using API.DTOs.Filtering;
using API.Entities;
using API.Entities.Enums;
using API.Entities.Scrobble;
@@ -186,4 +187,16 @@ public static class QueryableExtensions
_ => query
};
}
+
+ ///
+ /// Performs either OrderBy or OrderByDescending on the given query based on the value of SortOptions.IsAscending.
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static IQueryable DoOrderBy(this IQueryable query, Expression> keySelector, SortOptions sortOptions)
+ {
+ return sortOptions.IsAscending ? query.OrderBy(keySelector) : query.OrderByDescending(keySelector);
+ }
}