mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-06 22:15:48 +01:00
topics data refactor
This commit is contained in:
@@ -108,7 +108,11 @@ module.exports = function (db, module) {
|
||||
return getFromCache();
|
||||
}
|
||||
|
||||
db.collection('objects').find({ _key: { $in: nonCachedKeys } }, { projection: { _id: 0 } }).toArray(function (err, data) {
|
||||
var query = { _key: { $in: nonCachedKeys } };
|
||||
if (nonCachedKeys.length === 1) {
|
||||
query._key = nonCachedKeys[0];
|
||||
}
|
||||
db.collection('objects').find(query, { projection: { _id: 0 } }).toArray(function (err, data) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
@@ -133,8 +133,8 @@ Notifications.findRelated = function (mergeIds, set, callback) {
|
||||
db.getObjectsFields(keys, ['mergeId'], next);
|
||||
},
|
||||
function (sets, next) {
|
||||
sets = sets.map(set => set.mergeId);
|
||||
var mergeSet = new Set(mergeIds);
|
||||
sets = sets.map(set => String(set.mergeId));
|
||||
var mergeSet = new Set(mergeIds.map(id => String(id)));
|
||||
next(null, nids.filter((nid, idx) => mergeSet.has(sets[idx])));
|
||||
},
|
||||
], callback);
|
||||
|
||||
@@ -8,52 +8,14 @@ var categories = require('../categories');
|
||||
var utils = require('../utils');
|
||||
var translator = require('../translator');
|
||||
|
||||
function escapeTitle(topicData) {
|
||||
if (!topicData) {
|
||||
return;
|
||||
}
|
||||
if (topicData.title) {
|
||||
topicData.title = translator.escape(validator.escape(topicData.title.toString()));
|
||||
}
|
||||
if (topicData.titleRaw) {
|
||||
topicData.titleRaw = translator.escape(topicData.titleRaw);
|
||||
}
|
||||
}
|
||||
const intFields = ['tid', 'cid', 'uid', 'mainPid', 'deleted', 'locked', 'pinned'];
|
||||
|
||||
module.exports = function (Topics) {
|
||||
Topics.getTopicField = function (tid, field, callback) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
db.getObjectField('topic:' + tid, field, next);
|
||||
},
|
||||
function (value, next) {
|
||||
if (field === 'title') {
|
||||
value = translator.escape(validator.escape(String(value)));
|
||||
}
|
||||
next(null, value);
|
||||
},
|
||||
], callback);
|
||||
};
|
||||
|
||||
Topics.getTopicFields = function (tid, fields, callback) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
db.getObjectFields('topic:' + tid, fields, next);
|
||||
},
|
||||
function (topic, next) {
|
||||
escapeTitle(topic);
|
||||
next(null, topic);
|
||||
},
|
||||
], callback);
|
||||
};
|
||||
|
||||
Topics.getTopicsFields = function (tids, fields, callback) {
|
||||
if (!Array.isArray(tids) || !tids.length) {
|
||||
return callback(null, []);
|
||||
}
|
||||
var keys = tids.map(function (tid) {
|
||||
return 'topic:' + tid;
|
||||
});
|
||||
var keys = tids.map(tid => 'topic:' + tid);
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
if (fields.length) {
|
||||
@@ -69,53 +31,28 @@ module.exports = function (Topics) {
|
||||
], callback);
|
||||
};
|
||||
|
||||
Topics.getTopicField = function (tid, field, callback) {
|
||||
Topics.getTopicFields(tid, [field], function (err, topic) {
|
||||
callback(err, topic ? topic[field] : null);
|
||||
});
|
||||
};
|
||||
|
||||
Topics.getTopicFields = function (tid, fields, callback) {
|
||||
Topics.getTopicsFields([tid], fields, function (err, topics) {
|
||||
callback(err, topics ? topics[0] : null);
|
||||
});
|
||||
};
|
||||
|
||||
Topics.getTopicData = function (tid, callback) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
db.getObject('topic:' + tid, next);
|
||||
},
|
||||
function (topic, next) {
|
||||
if (!topic) {
|
||||
return next(null, null);
|
||||
}
|
||||
modifyTopic(topic);
|
||||
next(null, topic);
|
||||
},
|
||||
], callback);
|
||||
Topics.getTopicsFields([tid], [], function (err, topics) {
|
||||
callback(err, topics && topics.length ? topics[0] : null);
|
||||
});
|
||||
};
|
||||
|
||||
Topics.getTopicsData = function (tids, callback) {
|
||||
Topics.getTopicsFields(tids, [], callback);
|
||||
};
|
||||
|
||||
function modifyTopic(topic) {
|
||||
if (!topic) {
|
||||
return;
|
||||
}
|
||||
if (topic.hasOwnProperty('title')) {
|
||||
topic.titleRaw = topic.title;
|
||||
topic.title = String(topic.title);
|
||||
}
|
||||
|
||||
escapeTitle(topic);
|
||||
if (topic.hasOwnProperty('timestamp')) {
|
||||
topic.timestampISO = utils.toISOString(topic.timestamp);
|
||||
}
|
||||
if (topic.hasOwnProperty('lastposttime')) {
|
||||
topic.lastposttimeISO = utils.toISOString(topic.lastposttime);
|
||||
}
|
||||
|
||||
if (topic.hasOwnProperty('upvotes')) {
|
||||
topic.upvotes = parseInt(topic.upvotes, 10) || 0;
|
||||
}
|
||||
if (topic.hasOwnProperty('upvotes')) {
|
||||
topic.downvotes = parseInt(topic.downvotes, 10) || 0;
|
||||
}
|
||||
if (topic.hasOwnProperty('upvotes') && topic.hasOwnProperty('downvotes')) {
|
||||
topic.votes = topic.upvotes - topic.downvotes;
|
||||
}
|
||||
}
|
||||
|
||||
Topics.getCategoryData = function (tid, callback) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
@@ -144,3 +81,52 @@ module.exports = function (Topics) {
|
||||
db.deleteObjectFields('topic:' + tid, fields, callback);
|
||||
};
|
||||
};
|
||||
|
||||
function escapeTitle(topicData) {
|
||||
if (topicData) {
|
||||
if (topicData.title) {
|
||||
topicData.title = translator.escape(validator.escape(topicData.title.toString()));
|
||||
}
|
||||
if (topicData.titleRaw) {
|
||||
topicData.titleRaw = translator.escape(topicData.titleRaw);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function modifyTopic(topic) {
|
||||
if (!topic) {
|
||||
return;
|
||||
}
|
||||
|
||||
intFields.forEach(field => parseIntField(topic, field));
|
||||
|
||||
if (topic.hasOwnProperty('title')) {
|
||||
topic.titleRaw = topic.title;
|
||||
topic.title = String(topic.title);
|
||||
}
|
||||
|
||||
escapeTitle(topic);
|
||||
|
||||
if (topic.hasOwnProperty('timestamp')) {
|
||||
topic.timestampISO = utils.toISOString(topic.timestamp);
|
||||
}
|
||||
if (topic.hasOwnProperty('lastposttime')) {
|
||||
topic.lastposttimeISO = utils.toISOString(topic.lastposttime);
|
||||
}
|
||||
|
||||
if (topic.hasOwnProperty('upvotes')) {
|
||||
topic.upvotes = parseInt(topic.upvotes, 10) || 0;
|
||||
}
|
||||
if (topic.hasOwnProperty('upvotes')) {
|
||||
topic.downvotes = parseInt(topic.downvotes, 10) || 0;
|
||||
}
|
||||
if (topic.hasOwnProperty('upvotes') && topic.hasOwnProperty('downvotes')) {
|
||||
topic.votes = topic.upvotes - topic.downvotes;
|
||||
}
|
||||
}
|
||||
|
||||
function parseIntField(topic, field) {
|
||||
if (topic.hasOwnProperty(field)) {
|
||||
topic[field] = parseInt(topic[field], 10);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ module.exports = function (User) {
|
||||
const ignored = new Set(results.ignored);
|
||||
|
||||
var watched = results.all.filter(function (cid) {
|
||||
return cid && !ignored.has(cid);
|
||||
return cid && !ignored.has(String(cid));
|
||||
});
|
||||
next(null, watched);
|
||||
},
|
||||
|
||||
@@ -113,25 +113,23 @@ module.exports = function (User) {
|
||||
};
|
||||
|
||||
function uidsToUsers(uids, uniqueUids, usersData) {
|
||||
var ref = uniqueUids.reduce(function (memo, cur, idx) {
|
||||
memo[cur] = idx;
|
||||
var uidToUser = uniqueUids.reduce(function (memo, cur, idx) {
|
||||
memo[cur] = usersData[idx];
|
||||
return memo;
|
||||
}, {});
|
||||
var users = uids.map(function (uid) {
|
||||
const returnPayload = usersData[ref[uid]];
|
||||
const returnPayload = uidToUser[uid];
|
||||
if (uid > 0 && !returnPayload.uid) {
|
||||
returnPayload.oldUid = parseInt(uid, 10);
|
||||
}
|
||||
|
||||
return usersData[ref[uid]];
|
||||
return returnPayload;
|
||||
});
|
||||
return users;
|
||||
}
|
||||
|
||||
function uidsToUserKeys(uids) {
|
||||
return uids.map(function (uid) {
|
||||
return 'user:' + uid;
|
||||
});
|
||||
return uids.map(uid => 'user:' + uid);
|
||||
}
|
||||
|
||||
function modifyUserData(users, fieldsToRemove, callback) {
|
||||
|
||||
Reference in New Issue
Block a user