diff --git a/src/upgrades/1.19.2/store_downvoted_posts_in_zset.js b/src/upgrades/1.19.2/store_downvoted_posts_in_zset.js new file mode 100644 index 0000000000..f1752f8974 --- /dev/null +++ b/src/upgrades/1.19.2/store_downvoted_posts_in_zset.js @@ -0,0 +1,36 @@ +'use strict'; + +const db = require('../../database'); + +module.exports = { + name: 'Store downvoted posts in user votes sorted set', + timestamp: Date.UTC(2022, 1, 4), + method: async function () { + const batch = require('../../batch'); + const posts = require('../../posts'); + const { progress } = this; + + await batch.processSortedSet('posts:pid', async (ids) => { + const postData = await posts.getPostsFields(ids, ['uid', 'downvotes']); + const cids = await posts.getCidsByPids(ids); + + const promises = ids.reduce((memo, pid, idx) => { + const { uid, downvotes } = postData[idx]; + const cid = cids[idx]; + + if (!downvotes) { + progress.incr(); + return memo; + } + + memo.push(db.sortedSetAdd(`cid:${cid}:uid:${uid}:pids:votes`, -downvotes, pid)); + return memo; + }, []); + + await Promise.all(promises); + progress.incr(promises.length); + }, { + progress, + }); + }, +};