diff --git a/src/posts/delete.js b/src/posts/delete.js index 66c8269334..94f73cf494 100644 --- a/src/posts/delete.js +++ b/src/posts/delete.js @@ -236,7 +236,7 @@ module.exports = function (Posts) { } async function resolveFlags(postData, uid) { - const flaggedPosts = postData.filter(p => parseInt(p.flagId, 10)); + const flaggedPosts = postData.filter(p => p && parseInt(p.flagId, 10)); await Promise.all(flaggedPosts.map(p => flags.update(p.flagId, uid, { state: 'resolved' }))); } }; diff --git a/src/topics/delete.js b/src/topics/delete.js index 5190afd1ff..4e7f5d1400 100644 --- a/src/topics/delete.js +++ b/src/topics/delete.js @@ -5,25 +5,38 @@ const db = require('../database'); const user = require('../user'); const posts = require('../posts'); const categories = require('../categories'); +const flags = require('../flags'); const plugins = require('../plugins'); const batch = require('../batch'); module.exports = function (Topics) { Topics.delete = async function (tid, uid) { - const cid = await Topics.getTopicField(tid, 'cid'); - await removeTopicPidsFromCid(tid, cid); - await Topics.setTopicFields(tid, { - deleted: 1, - deleterUid: uid, - deletedTimestamp: Date.now(), - }); + const [cid, pids] = await Promise.all([ + Topics.getTopicField(tid, 'cid'), + Topics.getPids(tid), + ]); + await Promise.all([ + db.sortedSetRemove(`cid:${cid}:pids`, pids), + resolveTopicPostFlags(pids, uid), + Topics.setTopicFields(tid, { + deleted: 1, + deleterUid: uid, + deletedTimestamp: Date.now(), + }), + ]); + await categories.updateRecentTidForCid(cid); }; - async function removeTopicPidsFromCid(tid, cid) { - const pids = await Topics.getPids(tid); - await db.sortedSetRemove(`cid:${cid}:pids`, pids); + async function resolveTopicPostFlags(pids, uid) { + await batch.processArray(pids, async (pids) => { + const postData = await posts.getPostsFields(pids, ['pid', 'flagId']); + const flaggedPosts = postData.filter(p => p && parseInt(p.flagId, 10)); + await Promise.all(flaggedPosts.map(p => flags.update(p.flagId, uid, { state: 'resolved' }))); + }, { + batch: 500, + }); } async function addTopicPidsToCid(tid, cid) {