fix: check if unread_tids are followed

v1.18.x
Barış Soner Uşaklı 4 years ago
parent 31635e3e58
commit 2d5bd153e0

@ -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 },

@ -410,6 +410,9 @@ SELECT 1
return;
}
if (!values.length) {
return [];
}
values = values.map(helpers.valueToString);
const res = await module.pool.query({

@ -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);

@ -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);

Loading…
Cancel
Save