From a7534af25846bd3275871ed6129db434896cfbfd Mon Sep 17 00:00:00 2001 From: advplyr Date: Sun, 24 Aug 2025 16:18:39 -0500 Subject: [PATCH] Update book progress sort queries to use NULLS LAST --- server/utils/queries/libraryItemsBookFilters.js | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/server/utils/queries/libraryItemsBookFilters.js b/server/utils/queries/libraryItemsBookFilters.js index 6ee071ba2..9750ce6bb 100644 --- a/server/utils/queries/libraryItemsBookFilters.js +++ b/server/utils/queries/libraryItemsBookFilters.js @@ -289,19 +289,11 @@ module.exports = { const nullDir = sortDesc ? 'DESC NULLS FIRST' : 'ASC NULLS LAST' return [[Sequelize.literal(`CAST(\`series.bookSeries.sequence\` AS FLOAT) ${nullDir}`)]] } else if (sortBy === 'progress') { - return [[Sequelize.literal('mediaProgresses.updatedAt'), dir]] + return [[Sequelize.literal(`mediaProgresses.updatedAt ${dir} NULLS LAST`)]] } else if (sortBy === 'startedDate') { - // Sort started books first (not null), then unstarted (nulls last), then by createdAt desc - return [ - [Sequelize.literal('(CASE WHEN mediaProgresses.createdAt IS NULL THEN 1 ELSE 0 END)'), 'ASC'], - ['mediaProgresses', 'createdAt', dir] - ] + return [[Sequelize.literal(`mediaProgresses.createdAt ${dir} NULLS LAST`)]] } else if (sortBy === 'finishedDate') { - // Sort finished books first (not null), then unfinished (nulls last), then by finishedAt desc - return [ - [Sequelize.literal('(CASE WHEN mediaProgresses.finishedAt IS NULL THEN 1 ELSE 0 END)'), 'ASC'], - ['mediaProgresses', 'finishedAt', dir] - ] + return [[Sequelize.literal(`mediaProgresses.finishedAt ${dir} NULLS LAST`)]] } else if (sortBy === 'random') { return [Database.sequelize.random()] }