From f1de307bf9455d7209ef9c68282f35bccdf870c2 Mon Sep 17 00:00:00 2001 From: mikiher Date: Sun, 16 Feb 2025 08:52:33 +0200 Subject: [PATCH] Update cached user whenever mediaProgress is removed --- server/models/MediaProgress.js | 10 ++++++++++ server/models/User.js | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/server/models/MediaProgress.js b/server/models/MediaProgress.js index 617ade2a..3218d2e9 100644 --- a/server/models/MediaProgress.js +++ b/server/models/MediaProgress.js @@ -126,6 +126,16 @@ class MediaProgress extends Model { } }) + // make sure to call the afterDestroy hook for each instance + MediaProgress.addHook('beforeBulkDestroy', (options) => { + options.individualHooks = true + }) + + // update the potentially cached user after destroying the media progress + MediaProgress.addHook('afterDestroy', (instance) => { + user.mediaProgressRemoved(instance) + }) + user.hasMany(MediaProgress, { onDelete: 'CASCADE' }) diff --git a/server/models/User.js b/server/models/User.js index 56d6ba0e..153d6d48 100644 --- a/server/models/User.js +++ b/server/models/User.js @@ -404,6 +404,14 @@ class User extends Model { return count > 0 } + static mediaProgressRemoved(mediaProgress) { + const cachedUser = userCache.getById(mediaProgress.userId) + if (cachedUser) { + Logger.debug(`[User] mediaProgressRemoved: ${mediaProgress.id} from user ${cachedUser.id}`) + cachedUser.mediaProgresses = cachedUser.mediaProgresses.filter((mp) => mp.id !== mediaProgress.id) + } + } + /** * Initialize model * @param {import('../Database').sequelize} sequelize