fix: simplify increasePostCount logic by combining methods

This commit is contained in:
Julian Lam
2024-01-13 22:26:39 -05:00
parent 4bd7a574c3
commit 81d810983a
2 changed files with 14 additions and 18 deletions

View File

@@ -126,7 +126,7 @@ topicsController.get = async function getTopic(req, res, next) {
buildBreadcrumbs(topicData), buildBreadcrumbs(topicData),
addOldCategory(topicData, userPrivileges), addOldCategory(topicData, userPrivileges),
addTags(topicData, req, res, currentPage), addTags(topicData, req, res, currentPage),
incrementViewCount(req, tid), topics.increaseViewCount(req, tid),
markAsRead(req, tid), markAsRead(req, tid),
analytics.increment([`pageviews:byCid:${topicData.category.cid}`]), analytics.increment([`pageviews:byCid:${topicData.category.cid}`]),
]); ]);
@@ -164,19 +164,6 @@ function calculateStartStop(page, postIndex, settings) {
return { start: Math.max(0, start), stop: Math.max(0, stop) }; return { start: Math.max(0, start), stop: Math.max(0, stop) };
} }
async function incrementViewCount(req, tid) {
const allow = req.uid > 0 || (meta.config.guestsIncrementTopicViews && req.uid === 0);
if (allow) {
req.session.tids_viewed = req.session.tids_viewed || {};
const now = Date.now();
const interval = meta.config.incrementTopicViewsInterval * 60000;
if (!req.session.tids_viewed[tid] || req.session.tids_viewed[tid] < now - interval) {
await topics.increaseViewCount(tid);
req.session.tids_viewed[tid] = now;
}
}
}
async function markAsRead(req, tid) { async function markAsRead(req, tid) {
if (req.loggedIn) { if (req.loggedIn) {
const markedRead = await topics.markAsRead([tid], req.uid); const markedRead = await topics.markAsRead([tid], req.uid);

View File

@@ -296,13 +296,22 @@ module.exports = function (Topics) {
incrementFieldAndUpdateSortedSet(tid, 'postcount', -1, 'topics:posts'); incrementFieldAndUpdateSortedSet(tid, 'postcount', -1, 'topics:posts');
}; };
Topics.increaseViewCount = async function (tid) { Topics.increaseViewCount = async function (req, tid) {
const cid = await Topics.getTopicField(tid, 'cid'); const allow = req.uid > 0 || (meta.config.guestsIncrementTopicViews && req.uid === 0);
incrementFieldAndUpdateSortedSet(tid, 'viewcount', 1, ['topics:views', `cid:${cid}:tids:views`]); if (allow) {
req.session.tids_viewed = req.session.tids_viewed || {};
const now = Date.now();
const interval = meta.config.incrementTopicViewsInterval * 60000;
if (!req.session.tids_viewed[tid] || req.session.tids_viewed[tid] < now - interval) {
const cid = await Topics.getTopicField(tid, 'cid');
incrementFieldAndUpdateSortedSet(tid, 'viewcount', 1, ['topics:views', `cid:${cid}:tids:views`]);
req.session.tids_viewed[tid] = now;
}
}
}; };
async function incrementFieldAndUpdateSortedSet(tid, field, by, set) { async function incrementFieldAndUpdateSortedSet(tid, field, by, set) {
const value = await db.incrObjectFieldBy(`topic:${tid}`, field, by); const value = await db.incrObjectFieldBy(`${activitypub.helpers.isUri(tid) ? 'topicRemote' : 'topic'}:${tid}`, field, by);
await db[Array.isArray(set) ? 'sortedSetsAdd' : 'sortedSetAdd'](set, value, tid); await db[Array.isArray(set) ? 'sortedSetsAdd' : 'sortedSetAdd'](set, value, tid);
} }