From 81e0dcc9427b817315e56131ff81f14bc02f9f52 Mon Sep 17 00:00:00 2001 From: Licarious <37857277+Licarious@users.noreply.github.com> Date: Fri, 15 Aug 2025 17:11:45 -0500 Subject: [PATCH 1/3] series in-progress filter Updated series in-progress filter to return all series with books that have been started but not all finished. --- server/utils/queries/seriesFilters.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/utils/queries/seriesFilters.js b/server/utils/queries/seriesFilters.js index ed71e5b3..4c8d1f81 100644 --- a/server/utils/queries/seriesFilters.js +++ b/server/utils/queries/seriesFilters.js @@ -84,7 +84,7 @@ module.exports = { seriesWhere.push(Sequelize.where(Sequelize.literal(`(${progQuery})`), 0)) userPermissionBookWhere.replacements.userId = user.id } else if (filterValue === 'in-progress') { - attrQuery = 'SELECT count(*) FROM books b, bookSeries bs LEFT OUTER JOIN mediaProgresses mp ON mp.mediaItemId = b.id AND mp.userId = :userId WHERE bs.seriesId = series.id AND bs.bookId = b.id AND (mp.currentTime > 0 OR mp.ebookProgress > 0) AND mp.isFinished = 0' + attrQuery = 'SELECT COUNT(*) FROM books b JOIN bookSeries bs ON bs.bookId = b.id LEFT JOIN mediaProgresses mp ON mp.mediaItemId = b.id AND mp.userId = :userId WHERE bs.seriesId = series.id GROUP BY bs.seriesId HAVING SUM(CASE WHEN mp.isFinished = 1 THEN 1 ELSE 0 END) < COUNT(*) AND SUM(CASE WHEN mp.currentTime > 0 OR mp.ebookProgress > 0 THEN 1 ELSE 0 END) > 0' userPermissionBookWhere.replacements.userId = user.id } } From 97f06ce2569154cc96075af4b07f59d70585732a Mon Sep 17 00:00:00 2001 From: Licarious <37857277+Licarious@users.noreply.github.com> Date: Sat, 16 Aug 2025 07:27:29 -0500 Subject: [PATCH 2/3] book finished edge case fixed edge case were was marked finished without any progress --- server/utils/queries/seriesFilters.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/utils/queries/seriesFilters.js b/server/utils/queries/seriesFilters.js index 4c8d1f81..a279d694 100644 --- a/server/utils/queries/seriesFilters.js +++ b/server/utils/queries/seriesFilters.js @@ -84,7 +84,7 @@ module.exports = { seriesWhere.push(Sequelize.where(Sequelize.literal(`(${progQuery})`), 0)) userPermissionBookWhere.replacements.userId = user.id } else if (filterValue === 'in-progress') { - attrQuery = 'SELECT COUNT(*) FROM books b JOIN bookSeries bs ON bs.bookId = b.id LEFT JOIN mediaProgresses mp ON mp.mediaItemId = b.id AND mp.userId = :userId WHERE bs.seriesId = series.id GROUP BY bs.seriesId HAVING SUM(CASE WHEN mp.isFinished = 1 THEN 1 ELSE 0 END) < COUNT(*) AND SUM(CASE WHEN mp.currentTime > 0 OR mp.ebookProgress > 0 THEN 1 ELSE 0 END) > 0' + attrQuery = 'SELECT count(*) FROM books b JOIN bookSeries bs ON bs.bookId = b.id LEFT JOIN mediaProgresses mp ON mp.mediaItemId = b.id AND mp.userId = :userId WHERE bs.seriesId = series.id GROUP BY bs.seriesId HAVING SUM(CASE WHEN mp.isFinished = 1 THEN 1 ELSE 0 END) < count(*) AND SUM(CASE WHEN mp.currentTime > 0 OR mp.ebookProgress > 0 OR mp.isFinished = 1 THEN 1 ELSE 0 END) > 0' userPermissionBookWhere.replacements.userId = user.id } } From 90f4c48f0bc94b948600d315258ecf51bba7d8ef Mon Sep 17 00:00:00 2001 From: Licarious <37857277+Licarious@users.noreply.github.com> Date: Fri, 12 Dec 2025 19:18:45 -0600 Subject: [PATCH 3/3] simplified logic --- server/utils/queries/seriesFilters.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/utils/queries/seriesFilters.js b/server/utils/queries/seriesFilters.js index a279d694..033f4e02 100644 --- a/server/utils/queries/seriesFilters.js +++ b/server/utils/queries/seriesFilters.js @@ -84,7 +84,7 @@ module.exports = { seriesWhere.push(Sequelize.where(Sequelize.literal(`(${progQuery})`), 0)) userPermissionBookWhere.replacements.userId = user.id } else if (filterValue === 'in-progress') { - attrQuery = 'SELECT count(*) FROM books b JOIN bookSeries bs ON bs.bookId = b.id LEFT JOIN mediaProgresses mp ON mp.mediaItemId = b.id AND mp.userId = :userId WHERE bs.seriesId = series.id GROUP BY bs.seriesId HAVING SUM(CASE WHEN mp.isFinished = 1 THEN 1 ELSE 0 END) < count(*) AND SUM(CASE WHEN mp.currentTime > 0 OR mp.ebookProgress > 0 OR mp.isFinished = 1 THEN 1 ELSE 0 END) > 0' + attrQuery = 'SELECT count(*) FROM books b JOIN bookSeries bs ON bs.bookId = b.id LEFT JOIN mediaProgresses mp ON mp.mediaItemId = b.id AND mp.userId = :userId WHERE bs.seriesId = series.id GROUP BY bs.seriesId HAVING SUM(mp.isFinished = 1) < COUNT(*) AND SUM(mp.currentTime > 0 OR mp.ebookProgress > 0 OR mp.isFinished = 1) > 0' userPermissionBookWhere.replacements.userId = user.id } }