From cf88483feec0a85242c459d299d20fbc8b590170 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 4 Feb 2022 11:48:10 -0500 Subject: [PATCH] feat: upgrade script to store downvotes posts in the user :votes sorted set --- .../1.19.2/store_downvoted_posts_in_zset.js | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/upgrades/1.19.2/store_downvoted_posts_in_zset.js 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, + }); + }, +};