From 7405053b4470c00efb49e9456f1a8b78f43ebb36 Mon Sep 17 00:00:00 2001 From: Ajay Date: Wed, 7 Feb 2024 23:40:59 -0500 Subject: [PATCH] Reuse running reputation requests --- src/utils/reputation.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/utils/reputation.ts b/src/utils/reputation.ts index 6325f1a..906be30 100644 --- a/src/utils/reputation.ts +++ b/src/utils/reputation.ts @@ -14,6 +14,8 @@ interface ReputationDBResult { mostUpvotedInLockedVideoSum: number } +const activeReputationRequests: Record> = {}; + export async function getReputation(userID: UserID): Promise { const weekAgo = Date.now() - 1000 * 60 * 60 * 24 * 7; // 45 days ago const pastDate = Date.now() - 1000 * 60 * 60 * 24 * 45; // 45 days ago @@ -42,7 +44,11 @@ export async function getReputation(userID: UserID): Promise { THEN 1 ELSE 0 END) AS "mostUpvotedInLockedVideoSum" FROM "sponsorTimes" as "a" WHERE "userID" = ? AND "actionType" != 'full'`, [userID, weekAgo, pastDate, userID], { useReplica: true }) as Promise; - const result = await QueryCacher.get(fetchFromDB, reputationKey(userID)); + const promise = activeReputationRequests[userID] ?? QueryCacher.get(fetchFromDB, reputationKey(userID)); + activeReputationRequests[userID] = promise; + + const result = await promise; + delete activeReputationRequests[userID]; return calculateReputationFromMetrics(result); }