From 1f7be58124dce737ac252d08a7eefaa6990a6077 Mon Sep 17 00:00:00 2001 From: advplyr Date: Mon, 16 Jun 2025 17:50:53 -0500 Subject: [PATCH] Fix database cleanup query pulling duplicate mediaProgresses --- server/Database.js | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/server/Database.js b/server/Database.js index eb384f25..a260e89f 100644 --- a/server/Database.js +++ b/server/Database.js @@ -766,14 +766,25 @@ class Database { Logger.warn(`Removed ${badSessionsRemoved} sessions that were 3 seconds or less`) } - // Remove mediaProgresses with duplicate mediaItemId (remove the oldest updatedAt) - // const [duplicateMediaProgresses] = await this.sequelize.query(`SELECT id, mediaItemId FROM mediaProgresses WHERE (mediaItemId, userId, updatedAt) IN (SELECT mediaItemId, userId, MIN(updatedAt) FROM mediaProgresses GROUP BY mediaItemId, userId HAVING COUNT(*) > 1)`) - // for (const duplicateMediaProgress of duplicateMediaProgresses) { - // Logger.warn(`Found duplicate mediaProgress for mediaItem "${duplicateMediaProgress.mediaItemId}" - removing it`) - // await this.mediaProgressModel.destroy({ - // where: { id: duplicateMediaProgress.id } - // }) - // } + // Remove mediaProgresses with duplicate mediaItemId (remove the oldest updatedAt or if updatedAt is the same, remove arbitrary one) + const [duplicateMediaProgresses] = await this.sequelize.query(`SELECT mp1.id, mp1.mediaItemId +FROM mediaProgresses mp1 +WHERE EXISTS ( + SELECT 1 + FROM mediaProgresses mp2 + WHERE mp2.mediaItemId = mp1.mediaItemId + AND mp2.userId = mp1.userId + AND ( + mp2.updatedAt > mp1.updatedAt + OR (mp2.updatedAt = mp1.updatedAt AND mp2.id < mp1.id) + ) +)`) + for (const duplicateMediaProgress of duplicateMediaProgresses) { + Logger.warn(`Found duplicate mediaProgress for mediaItem "${duplicateMediaProgress.mediaItemId}" - removing it`) + await this.mediaProgressModel.destroy({ + where: { id: duplicateMediaProgress.id } + }) + } } async createTextSearchQuery(query) {