mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-05-07 16:57:08 +02:00
added tag counts to api return
This commit is contained in:
@@ -113,6 +113,10 @@ module.exports = function(db, module) {
|
||||
});
|
||||
};
|
||||
|
||||
module.sortedSetsCard = function(keys, callback) {
|
||||
async.map(keys, module.sortedSetCard, callback);
|
||||
};
|
||||
|
||||
module.sortedSetRank = function(key, value, callback) {
|
||||
module.getListRange(key, 0, -1, function(err, list) {
|
||||
for (var i = 0, ii=list.length; i< ii; i++) {
|
||||
|
||||
@@ -101,6 +101,10 @@ module.exports = function(db, module) {
|
||||
});
|
||||
};
|
||||
|
||||
module.sortedSetsCard = function(keys, callback) {
|
||||
async.map(keys, module.sortedSetCard, callback);
|
||||
};
|
||||
|
||||
module.sortedSetRank = function(key, value, callback) {
|
||||
getSortedSetRank(module.getSortedSetRange, key, value, callback);
|
||||
};
|
||||
|
||||
@@ -51,6 +51,17 @@ module.exports = function(redisClient, module) {
|
||||
redisClient.zcard(key, callback);
|
||||
};
|
||||
|
||||
module.sortedSetsCard = function(keys, callback) {
|
||||
if (Array.isArray(keys) && !keys.length) {
|
||||
return callback(null, []);
|
||||
}
|
||||
var multi = redisClient.multi();
|
||||
for(var i=0; i<keys.length; ++i) {
|
||||
multi.zcard(keys[i]);
|
||||
}
|
||||
multi.exec(callback);
|
||||
};
|
||||
|
||||
module.sortedSetRank = function(key, value, callback) {
|
||||
redisClient.zrank(key, value, callback);
|
||||
};
|
||||
|
||||
@@ -5,6 +5,7 @@ var async = require('async'),
|
||||
winston = require('winston'),
|
||||
db = require('../database'),
|
||||
meta = require('../meta'),
|
||||
_ = require('underscore'),
|
||||
plugins = require('../plugins'),
|
||||
utils = require('../../public/src/utils');
|
||||
|
||||
@@ -87,8 +88,8 @@ module.exports = function(Topics) {
|
||||
};
|
||||
|
||||
Topics.getTopicTagsObjects = function(tid, callback) {
|
||||
Topics.getTopicTags(tid, function(err, tags) {
|
||||
callback(err, mapToObject(tags));
|
||||
Topics.getTopicsTagsObjects([tid], function(err, data) {
|
||||
callback(err, Array.isArray(data) && data.length ? data[0] : []);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -102,21 +103,34 @@ module.exports = function(Topics) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
members.forEach(function(tags, index) {
|
||||
if (Array.isArray(tags)) {
|
||||
members[index] = mapToObject(tags);
|
||||
var uniqueTags = _.uniq(_.flatten(members));
|
||||
var tagTopicSets = uniqueTags.map(function(tag) {
|
||||
return 'tag:' + tag + ':topics';
|
||||
});
|
||||
|
||||
db.sortedSetsCard(tagTopicSets, function(err, data) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
})
|
||||
callback(null, members);
|
||||
var tagCounts = _.object(uniqueTags, data);
|
||||
|
||||
members.forEach(function(tags, index) {
|
||||
if (Array.isArray(tags)) {
|
||||
members[index] = mapToObject(tags, tagCounts);
|
||||
}
|
||||
});
|
||||
callback(null, members);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
function mapToObject(tags) {
|
||||
function mapToObject(tags, tagCounts) {
|
||||
if (!tags) {
|
||||
return tags;
|
||||
}
|
||||
|
||||
return tags.map(function(tag) {
|
||||
return {name: tag};
|
||||
return {name: tag, score: tagCounts ? tagCounts[tag] : 0};
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user