Skip to content

Commit

Permalink
fix: check if unread_tids are followed
Browse files Browse the repository at this point in the history
  • Loading branch information
barisusakli committed Sep 11, 2020
1 parent 31635e3 commit 2d5bd15
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 2 deletions.
3 changes: 3 additions & 0 deletions src/database/mongo/sorted.js
Expand Up @@ -318,6 +318,9 @@ module.exports = function (module) {
if (!key) {
return;
}
if (!values.length) {
return [];
}
values = values.map(helpers.valueToString);
const results = await module.client.collection('objects').find({
_key: key, value: { $in: values },
Expand Down
3 changes: 3 additions & 0 deletions src/database/postgres/sorted.js
Expand Up @@ -410,6 +410,9 @@ SELECT 1
return;
}

if (!values.length) {
return [];
}
values = values.map(helpers.valueToString);

const res = await module.pool.query({
Expand Down
3 changes: 3 additions & 0 deletions src/database/redis/sorted.js
Expand Up @@ -203,6 +203,9 @@ module.exports = function (module) {
};

module.isSortedSetMembers = async function (key, values) {
if (!values.length) {
return [];
}
const batch = module.client.batch();
values.forEach(v => batch.zscore(key, String(v)));
const results = await helpers.execBatch(batch);
Expand Down
15 changes: 13 additions & 2 deletions src/topics/unread.js
Expand Up @@ -101,10 +101,21 @@ module.exports = function (Topics) {
]);

const userReadTime = _.mapValues(_.keyBy(userScores, 'value'), 'score');
const isTopicsFollowed = _.mapValues(_.keyBy(followedTids, 'value'), 'score');
const isTopicsFollowed = {};
followedTids.forEach((t) => {
isTopicsFollowed[t.value] = true;
});
const unreadFollowed = await db.isSortedSetMembers(
'uid:' + params.uid + ':followed_tids', tids_unread.map(t => t.value)
);

tids_unread.forEach((t, i) => {
isTopicsFollowed[t.value] = unreadFollowed[i];
});

const unreadTopics = _.unionWith(categoryTids, followedTids.concat(tids_unread), (a, b) => a.value === b.value)
const unreadTopics = _.unionWith(categoryTids, followedTids, (a, b) => a.value === b.value)
.filter(t => !ignoredTids.includes(t.value) && (!userReadTime[t.value] || t.score > userReadTime[t.value]))
.concat(tids_unread)
.sort((a, b) => b.score - a.score);

let tids = _.uniq(unreadTopics.map(topic => topic.value)).slice(0, 200);
Expand Down

0 comments on commit 2d5bd15

Please sign in to comment.