From 9e1e9c86d372733ea2f84bb845351e0bbd27ae5c Mon Sep 17 00:00:00 2001 From: eee4 <41441600+eee4@users.noreply.github.com> Date: Tue, 22 Jul 2025 12:43:35 +0200 Subject: [PATCH] feat: sort the quotes from newest first by default --- Controllers/QuoteController.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/Controllers/QuoteController.cs b/Controllers/QuoteController.cs index 0bb5d86..17d2e2b 100644 --- a/Controllers/QuoteController.cs +++ b/Controllers/QuoteController.cs @@ -41,6 +41,7 @@ public class QuotesController : ControllerBase /// Has CORS set, unlike e.g. GET /api/v1/quote/{id} or GET /api/v1/quote/random. /// /// The page number + /// How to sort the results (desc/asc) /// (Optional) Standalone category id or comma separated ids (e.g. "1" or "1,2,3") /// A page (<= 10 quotes) /// Returned on valid request @@ -49,7 +50,7 @@ public class QuotesController : ControllerBase [EnableCors] [ProducesResponseType(typeof(List), 200)] [ProducesResponseType(typeof(ErrorDTO), 404)] - public async Task GetQuotePage(int page_no, [FromQuery] string? category_id = null) + public async Task GetQuotePage(int page_no, string? sort = "desc", [FromQuery] string? category_id = null) { var totalQuotes = await _db.Quotes.CountAsync(); const int PageSize = 10; @@ -80,8 +81,15 @@ public class QuotesController : ControllerBase .Include(q => q.QuoteCategories!) .ThenInclude(qc => qc.Category) .Include(q => q.User) - .Include(q => q.Image) - .OrderBy(q => q.Id); + .Include(q => q.Image); + + // Sort the results in ascending/descending order by id + IOrderedQueryable? orderedQuery; + if (sort != null && sort.Equals("asc")) + orderedQuery = baseQuery.OrderBy(q => q.Id); + else + // Sort in descending order by default + orderedQuery = baseQuery.OrderByDescending(q => q.Id); // Botched solution List pageQuotes; @@ -89,7 +97,7 @@ public class QuotesController : ControllerBase // Filtrowanie przed pobraniem strony if (categories != null) { - pageQuotes = await baseQuery + pageQuotes = await orderedQuery .Where(q => q.QuoteCategories! .Any(qc => categories.Contains(qc.CategoryId)) //.Any(qc => qc.CategoryId == category_id.Value) @@ -100,7 +108,7 @@ public class QuotesController : ControllerBase } else { - pageQuotes = await baseQuery + pageQuotes = await orderedQuery .Skip((page_no - 1) * PageSize) .Take(PageSize) .ToListAsync();