diff --git a/src/topics/tags.js b/src/topics/tags.js index 64cf407042..a1080f7eb2 100644 --- a/src/topics/tags.js +++ b/src/topics/tags.js @@ -42,12 +42,13 @@ module.exports = function (Topics) { const counts = await db.sortedSetsCard( tags.map(tag => `cid:${cid}:tag:${tag}:topics`) ); + const tagToCount = _.zipObject(tags, counts); const set = `cid:${cid}:tags`; - const bulkAdd = tags.filter((tag, index) => counts[index] > 0) - .map((tag, index) => [set, counts[index], tag]); + const bulkAdd = tags.filter(tag => tagToCount[tag] > 0) + .map(tag => [set, tagToCount[tag], tag]); - const bulkRemove = tags.filter((tag, index) => counts[index] <= 0) + const bulkRemove = tags.filter(tag => tagToCount[tag] <= 0) .map(tag => [set, tag]); await Promise.all([ @@ -289,13 +290,15 @@ module.exports = function (Topics) { }; Topics.getTopicTags = async function (tid) { - return await db.getSetMembers(`topic:${tid}:tags`); + const tags = await db.getSetMembers(`topic:${tid}:tags`); + return tags.sort(); }; Topics.getTopicsTags = async function (tids) { - return await db.getSetsMembers( - tids.map(tid => `topic:${tid}:tags`) - ); + const keys = tids.map(tid => `topic:${tid}:tags`); + const tags = await db.getSetsMembers(keys); + tags.forEach(tags => tags.sort()); + return tags; }; Topics.getTopicTagsObjects = async function (tid) { @@ -314,6 +317,7 @@ module.exports = function (Topics) { topicTags.forEach((tags, index) => { if (Array.isArray(tags)) { topicTags[index] = tags.map(tag => tagDataMap[tag]); + topicTags[index].sort((tag1, tag2) => tag2.value - tag1.value); } });