From e8429f509b414a489a5261bec07600d68fce8164 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Thu, 28 Jan 2021 10:18:09 -0500 Subject: [PATCH] fix: handle delete and update for categories:name zset --- src/categories/delete.js | 13 +++++++++---- src/categories/update.js | 10 ++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/categories/delete.js b/src/categories/delete.js index 42b2bacdce..3e76b22069 100644 --- a/src/categories/delete.js +++ b/src/categories/delete.js @@ -21,12 +21,17 @@ module.exports = function (Categories) { await async.eachLimit(pinnedTids, 10, async function (tid) { await topics.purgePostsAndTopic(tid, uid); }); - await purgeCategory(cid); - plugins.hooks.fire('action:category.delete', { cid: cid, uid: uid }); + const categoryData = await Categories.getCategoryData(cid); + await purgeCategory(categoryData); + plugins.hooks.fire('action:category.delete', { cid: cid, uid: uid, category: categoryData }); }; - async function purgeCategory(cid) { - await db.sortedSetRemove('categories:cid', cid); + async function purgeCategory(categoryData) { + const cid = categoryData.cid; + await db.sortedSetRemoveBulk([ + ['categories:cid', cid], + ['categories:name', categoryData.name.substr(0, 200).toLowerCase() + ':' + cid], + ]); await removeFromParent(cid); await deleteTags(cid); await db.deleteAll([ diff --git a/src/categories/update.js b/src/categories/update.js index 51ca422380..b44bb63f72 100644 --- a/src/categories/update.js +++ b/src/categories/update.js @@ -48,7 +48,10 @@ module.exports = function (Categories) { return await updateParent(cid, value); } else if (key === 'tagWhitelist') { return await updateTagWhitelist(cid, value); + } else if (key === 'name') { + return await updateName(cid, value); } + await db.setObjectField('category:' + cid, key, value); if (key === 'order') { await updateOrder(cid, value); @@ -95,4 +98,11 @@ module.exports = function (Categories) { const parsedDescription = await plugins.hooks.fire('filter:parse.raw', description); await Categories.setCategoryField(cid, 'descriptionParsed', parsedDescription); }; + + async function updateName(cid, newName) { + const oldName = await Categories.getCategoryField(cid, 'name'); + await db.sortedSetRemove('categories:name', oldName.substr(0, 200).toLowerCase() + ':' + cid); + await db.sortedSetAdd('categories:name', 0, newName.substr(0, 200).toLowerCase() + ':' + cid); + await db.setObjectField('category:' + cid, 'name', newName); + } };