You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.3 KiB
JavaScript
58 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
const async = require('async');
|
|
const db = require('../../database');
|
|
const batch = require('../../batch');
|
|
|
|
|
|
module.exports = {
|
|
name: 'Reformatting post diffs to be stored in lists and hash instead of single zset',
|
|
timestamp: Date.UTC(2018, 2, 15),
|
|
method: function (callback) {
|
|
const { progress } = this;
|
|
|
|
batch.processSortedSet('posts:pid', (pids, next) => {
|
|
async.each(pids, (pid, next) => {
|
|
db.getSortedSetRangeWithScores(`post:${pid}:diffs`, 0, -1, (err, diffs) => {
|
|
if (err) {
|
|
return next(err);
|
|
}
|
|
|
|
if (!diffs || !diffs.length) {
|
|
progress.incr();
|
|
return next();
|
|
}
|
|
|
|
// For each diff, push to list
|
|
async.each(diffs, (diff, next) => {
|
|
async.series([
|
|
async.apply(db.delete.bind(db), `post:${pid}:diffs`),
|
|
async.apply(db.listPrepend.bind(db), `post:${pid}:diffs`, diff.score),
|
|
async.apply(db.setObject.bind(db), `diff:${pid}.${diff.score}`, {
|
|
pid: pid,
|
|
patch: diff.value,
|
|
}),
|
|
], next);
|
|
}, (err) => {
|
|
if (err) {
|
|
return next(err);
|
|
}
|
|
|
|
progress.incr();
|
|
return next();
|
|
});
|
|
});
|
|
}, (err) => {
|
|
if (err) {
|
|
// Probably type error, ok to incr and continue
|
|
progress.incr();
|
|
}
|
|
|
|
return next();
|
|
});
|
|
}, {
|
|
progress: progress,
|
|
}, callback);
|
|
},
|
|
};
|