NodeBB/NodeBB

View on GitHub
src/upgrades/1.12.0/category_watch_state.js

Summary

Maintainability
A
0 mins
Test Coverage
/* eslint-disable no-await-in-loop */

'use strict';

const db = require('../../database');
const batch = require('../../batch');
const categories = require('../../categories');

module.exports = {
    name: 'Update category watch data',
    timestamp: Date.UTC(2018, 11, 13),
    method: async function () {
        const { progress } = this;

        const cids = await db.getSortedSetRange('categories:cid', 0, -1);
        const keys = cids.map(cid => `cid:${cid}:ignorers`);

        await batch.processSortedSet('users:joindate', async (uids) => {
            progress.incr(uids.length);
            for (const cid of cids) {
                const isMembers = await db.isSortedSetMembers(`cid:${cid}:ignorers`, uids);
                uids = uids.filter((uid, index) => isMembers[index]);
                if (uids.length) {
                    const states = uids.map(() => categories.watchStates.ignoring);
                    await db.sortedSetAdd(`cid:${cid}:uid:watch:state`, states, uids);
                }
            }
        }, {
            progress: progress,
            batch: 500,
        });

        await db.deleteAll(keys);
    },
};