move bookmarks
parent
c927eb15d7
commit
e48f1dac2a
@ -0,0 +1,83 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
var async = require('async');
|
||||
|
||||
var db = require('../database');
|
||||
var posts = require('../posts');
|
||||
|
||||
module.exports = function (Topics) {
|
||||
|
||||
Topics.getUserBookmark = function (tid, uid, callback) {
|
||||
db.sortedSetScore('tid:' + tid + ':bookmarks', uid, callback);
|
||||
};
|
||||
|
||||
Topics.getUserBookmarks = function (tids, uid, callback) {
|
||||
if (!parseInt(uid, 10)) {
|
||||
return callback(null, tids.map(function () {
|
||||
return null;
|
||||
}));
|
||||
}
|
||||
db.sortedSetsScore(tids.map(function (tid) {
|
||||
return 'tid:' + tid + ':bookmarks';
|
||||
}), uid, callback);
|
||||
};
|
||||
|
||||
Topics.setUserBookmark = function (tid, uid, index, callback) {
|
||||
db.sortedSetAdd('tid:' + tid + ':bookmarks', index, uid, callback);
|
||||
};
|
||||
|
||||
Topics.getTopicBookmarks = function (tid, callback) {
|
||||
db.getSortedSetRangeWithScores(['tid:' + tid + ':bookmarks'], 0, -1, callback);
|
||||
};
|
||||
|
||||
Topics.updateTopicBookmarks = function (tid, pids, callback) {
|
||||
var maxIndex;
|
||||
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
Topics.getPostCount(tid, next);
|
||||
},
|
||||
function (postcount, next) {
|
||||
maxIndex = postcount;
|
||||
Topics.getTopicBookmarks(tid, next);
|
||||
},
|
||||
function (bookmarks, next) {
|
||||
var forkedPosts = pids.map(function (pid) {
|
||||
return {pid: pid, tid: tid};
|
||||
});
|
||||
|
||||
var uidData = bookmarks.map(function (bookmark) {
|
||||
return {
|
||||
uid: bookmark.value,
|
||||
bookmark: bookmark.score
|
||||
};
|
||||
});
|
||||
|
||||
async.eachLimit(uidData, 50, function (data, next) {
|
||||
posts.getPostIndices(forkedPosts, data.uid, function (err, postIndices) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
|
||||
var bookmark = data.bookmark;
|
||||
bookmark = bookmark < maxIndex ? bookmark : maxIndex;
|
||||
|
||||
for (var i = 0; i < postIndices.length && postIndices[i] < data.bookmark; ++i) {
|
||||
--bookmark;
|
||||
}
|
||||
|
||||
if (parseInt(bookmark, 10) !== parseInt(data.bookmark, 10)) {
|
||||
Topics.setUserBookmark(tid, data.uid, bookmark, next);
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
});
|
||||
}, next);
|
||||
}
|
||||
], function (err) {
|
||||
callback(err);
|
||||
});
|
||||
};
|
||||
|
||||
};
|
Loading…
Reference in New Issue