categories.js refactor

v1.18.x
barisusakli 10 years ago
parent daebc322eb
commit 8fdc03eaad

@ -1,68 +1,26 @@
'use strict'; 'use strict';
var db = require('./database'), var async = require('async'),
posts = require('./posts'), nconf = require('nconf'),
utils = require('./../public/src/utils'),
db = require('./database'),
user = require('./user'), user = require('./user'),
Groups = require('./groups'), Groups = require('./groups'),
topics = require('./topics'),
plugins = require('./plugins'), plugins = require('./plugins'),
meta = require('./meta'),
validator = require('validator'), validator = require('validator'),
privileges = require('./privileges'), privileges = require('./privileges');
async = require('async'),
winston = require('winston'),
nconf = require('nconf');
(function(Categories) { (function(Categories) {
require('./categories/create')(Categories);
require('./categories/delete')(Categories); require('./categories/delete')(Categories);
require('./categories/topics')(Categories);
require('./categories/unread')(Categories);
require('./categories/activeusers')(Categories); require('./categories/activeusers')(Categories);
require('./categories/recentreplies')(Categories); require('./categories/recentreplies')(Categories);
require('./categories/update')(Categories); require('./categories/update')(Categories);
Categories.create = function(data, callback) {
db.incrObjectField('global', 'nextCid', function(err, cid) {
if (err) {
return callback(err);
}
var slug = cid + '/' + utils.slugify(data.name);
var category = {
cid: cid,
name: data.name,
description: data.description,
icon: data.icon,
bgColor: data.bgColor,
color: data.color,
slug: slug,
parentCid: 0,
topic_count: 0,
post_count: 0,
disabled: 0,
order: data.order,
link: '',
numRecentReplies: 1,
class: 'col-md-3 col-xs-6',
imageClass: 'auto'
};
async.series([
async.apply(db.setObject, 'category:' + cid, category),
async.apply(db.sortedSetAdd, 'categories:cid', data.order, cid)
], function(err) {
if (err) {
return callback(err);
}
callback(null, category);
});
});
};
Categories.exists = function(cid, callback) { Categories.exists = function(cid, callback) {
db.isSortedSetMember('categories:cid', cid, callback); db.isSortedSetMember('categories:cid', cid, callback);
}; };
@ -112,42 +70,6 @@ var db = require('./database'),
}); });
}; };
Categories.getCategoryTopics = function(data, callback) {
var tids;
async.waterfall([
function(next) {
Categories.getTopicIds(data.targetUid ? 'cid:' + data.cid + ':uid:' + data.targetUid + ':tids' : 'cid:' + data.cid + ':tids', data.start, data.stop, next);
},
function(topicIds, next) {
tids = topicIds;
topics.getTopicsByTids(tids, data.uid, next);
},
function(topics, next) {
if (!Array.isArray(topics) || !topics.length) {
return next(null, {
topics: [],
nextStart: 1
});
}
var indices = {},
i = 0;
for(i=0; i<tids.length; ++i) {
indices[tids[i]] = data.start + i;
}
for(i=0; i<topics.length; ++i) {
topics[i].index = indices[topics[i].tid];
}
next(null, {
topics: topics,
nextStart: data.stop + 1
});
}
], callback);
};
Categories.isIgnored = function(cids, uid, callback) { Categories.isIgnored = function(cids, uid, callback) {
user.getIgnoredCategories(uid, function(err, ignoredCids) { user.getIgnoredCategories(uid, function(err, ignoredCids) {
if (err) { if (err) {
@ -161,20 +83,6 @@ var db = require('./database'),
}); });
}; };
Categories.getTopicIds = function(set, start, stop, callback) {
db.getSortedSetRevRange(set, start, stop, callback);
};
Categories.getTopicIndex = function(tid, callback) {
topics.getTopicField(tid, 'cid', function(err, cid) {
if(err) {
return callback(err);
}
db.sortedSetRevRank('cid:' + cid + ':tids', tid, callback);
});
};
Categories.getPageCount = function(cid, uid, callback) { Categories.getPageCount = function(cid, uid, callback) {
Categories.getCategoryField(cid, 'topic_count', function(err, topicCount) { Categories.getCategoryField(cid, 'topic_count', function(err, topicCount) {
if (err) { if (err) {
@ -256,53 +164,6 @@ var db = require('./database'),
}); });
}; };
Categories.markAsRead = function(cids, uid, callback) {
callback = callback || function() {};
if (!Array.isArray(cids) || !cids.length) {
return callback();
}
var keys = cids.map(function(cid) {
return 'cid:' + cid + ':read_by_uid';
});
db.isMemberOfSets(keys, uid, function(err, hasRead) {
if (err) {
return callback(err);
}
keys = keys.filter(function(key, index) {
return !hasRead[index];
});
if (!keys.length) {
return callback();
}
db.setsAdd(keys, uid, callback);
});
};
Categories.markAsUnreadForAll = function(cid, callback) {
callback = callback || function() {};
db.delete('cid:' + cid + ':read_by_uid', function(err) {
callback(err);
});
};
Categories.hasReadCategories = function(cids, uid, callback) {
var sets = [];
for (var i = 0, ii = cids.length; i < ii; i++) {
sets.push('cid:' + cids[i] + ':read_by_uid');
}
db.isMemberOfSets(sets, uid, callback);
};
Categories.hasReadCategory = function(cid, uid, callback) {
db.isSetMember('cid:' + cid + ':read_by_uid', uid, callback);
};
Categories.getCategoryData = function(cid, callback) { Categories.getCategoryData = function(cid, callback) {
Categories.getCategoriesData([cid], function(err, categories) { Categories.getCategoriesData([cid], function(err, categories) {
callback(err, categories ? categories[0] : null); callback(err, categories ? categories[0] : null);
@ -455,35 +316,4 @@ var db = require('./database'),
], callback); ], callback);
}; };
Categories.onNewPostMade = function(postData, callback) {
topics.getTopicFields(postData.tid, ['cid', 'pinned'], function(err, topicData) {
if (err) {
return callback(err);
}
if (!topicData || !topicData.cid) {
return callback();
}
var cid = topicData.cid;
async.parallel([
function(next) {
db.sortedSetAdd('cid:' + cid + ':pids', postData.timestamp, postData.pid, next);
},
function(next) {
db.incrObjectField('category:' + cid, 'post_count', next);
},
function(next) {
if (parseInt(topicData.pinned, 10) === 1) {
next();
} else {
db.sortedSetAdd('cid:' + cid + ':tids', postData.timestamp, postData.tid, next);
}
}
], callback);
});
};
}(exports)); }(exports));

@ -0,0 +1,48 @@
'use strict';
var async = require('async'),
db = require('../database'),
utils = require('../../public/src/utils');
module.exports = function(Categories) {
Categories.create = function(data, callback) {
db.incrObjectField('global', 'nextCid', function(err, cid) {
if (err) {
return callback(err);
}
var slug = cid + '/' + utils.slugify(data.name);
var category = {
cid: cid,
name: data.name,
description: data.description,
icon: data.icon,
bgColor: data.bgColor,
color: data.color,
slug: slug,
parentCid: 0,
topic_count: 0,
post_count: 0,
disabled: 0,
order: data.order,
link: '',
numRecentReplies: 1,
class: 'col-md-3 col-xs-6',
imageClass: 'auto'
};
async.series([
async.apply(db.setObject, 'category:' + cid, category),
async.apply(db.sortedSetAdd, 'categories:cid', data.order, cid)
], function(err) {
if (err) {
return callback(err);
}
callback(null, category);
});
});
};
};

@ -0,0 +1,89 @@
'use strict';
var async = require('async'),
db = require('../database'),
topics = require('../topics');
module.exports = function(Categories) {
Categories.getCategoryTopics = function(data, callback) {
var tids;
async.waterfall([
function(next) {
Categories.getTopicIds(data.targetUid ? 'cid:' + data.cid + ':uid:' + data.targetUid + ':tids' : 'cid:' + data.cid + ':tids', data.start, data.stop, next);
},
function(topicIds, next) {
tids = topicIds;
topics.getTopicsByTids(tids, data.uid, next);
},
function(topics, next) {
if (!Array.isArray(topics) || !topics.length) {
return next(null, {
topics: [],
nextStart: 1
});
}
var indices = {},
i = 0;
for(i=0; i<tids.length; ++i) {
indices[tids[i]] = data.start + i;
}
for(i=0; i<topics.length; ++i) {
topics[i].index = indices[topics[i].tid];
}
next(null, {
topics: topics,
nextStart: data.stop + 1
});
}
], callback);
};
Categories.getTopicIds = function(set, start, stop, callback) {
db.getSortedSetRevRange(set, start, stop, callback);
};
Categories.getTopicIndex = function(tid, callback) {
topics.getTopicField(tid, 'cid', function(err, cid) {
if(err) {
return callback(err);
}
db.sortedSetRevRank('cid:' + cid + ':tids', tid, callback);
});
};
Categories.onNewPostMade = function(postData, callback) {
topics.getTopicFields(postData.tid, ['cid', 'pinned'], function(err, topicData) {
if (err) {
return callback(err);
}
if (!topicData || !topicData.cid) {
return callback();
}
var cid = topicData.cid;
async.parallel([
function(next) {
db.sortedSetAdd('cid:' + cid + ':pids', postData.timestamp, postData.pid, next);
},
function(next) {
db.incrObjectField('category:' + cid, 'post_count', next);
},
function(next) {
if (parseInt(topicData.pinned, 10) === 1) {
next();
} else {
db.sortedSetAdd('cid:' + cid + ':tids', postData.timestamp, postData.tid, next);
}
}
], callback);
});
};
};

@ -0,0 +1,56 @@
"use strict";
var async = require('async'),
db = require('../database');
module.exports = function(Categories) {
Categories.markAsRead = function(cids, uid, callback) {
callback = callback || function() {};
if (!Array.isArray(cids) || !cids.length) {
return callback();
}
var keys = cids.map(function(cid) {
return 'cid:' + cid + ':read_by_uid';
});
db.isMemberOfSets(keys, uid, function(err, hasRead) {
if (err) {
return callback(err);
}
keys = keys.filter(function(key, index) {
return !hasRead[index];
});
if (!keys.length) {
return callback();
}
db.setsAdd(keys, uid, callback);
});
};
Categories.markAsUnreadForAll = function(cid, callback) {
callback = callback || function() {};
db.delete('cid:' + cid + ':read_by_uid', function(err) {
callback(err);
});
};
Categories.hasReadCategories = function(cids, uid, callback) {
var sets = [];
for (var i = 0, ii = cids.length; i < ii; i++) {
sets.push('cid:' + cids[i] + ':read_by_uid');
}
db.isMemberOfSets(sets, uid, callback);
};
Categories.hasReadCategory = function(cid, uid, callback) {
db.isSetMember('cid:' + cid + ':read_by_uid', uid, callback);
};
};
Loading…
Cancel
Save