From 7d87d0c3e058e1f6a8c129b2808a5e6ade3b47d6 Mon Sep 17 00:00:00 2001 From: mat Date: Thu, 10 Feb 2022 19:30:36 -0600 Subject: fix leaderboards not loading sometimes, hopefully --- src/database.ts | 75 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 44 insertions(+), 31 deletions(-) (limited to 'src/database.ts') diff --git a/src/database.ts b/src/database.ts index 571ec5e..e195eed 100644 --- a/src/database.ts +++ b/src/database.ts @@ -313,21 +313,28 @@ async function fetchMemberLeaderboardRaw(name: string): Promise { - return { - profile: i.profile, - uuid: i.uuid, - value: i.stats[name] - } - }) - fetchingRawLeaderboardNames.delete(name) - cachedRawLeaderboards.set(name, leaderboardRaw) - return leaderboardRaw + + try { + const leaderboardRaw: memberRawLeaderboardItem[] = (await memberLeaderboardsCollection + .find(query) + .sort(sortQuery) + .limit(leaderboardMax) + .toArray()) + .map((i: DatabaseMemberLeaderboardItem): memberRawLeaderboardItem => { + return { + profile: i.profile, + uuid: i.uuid, + value: i.stats[name] + } + }) + fetchingRawLeaderboardNames.delete(name) + cachedRawLeaderboards.set(name, leaderboardRaw) + return leaderboardRaw + } catch (e) { + // if it fails while fetching, remove it from fetchingRawLeaderboardNames + fetchingRawLeaderboardNames.delete(name) + throw e + } } async function fetchProfileLeaderboardRaw(name: string): Promise { @@ -351,22 +358,28 @@ async function fetchProfileLeaderboardRaw(name: string): Promise { - return { - players: i.players, - uuid: i.uuid, - value: i.stats[name] - } - }) - fetchingRawLeaderboardNames.delete(name) - - cachedRawLeaderboards.set(name, leaderboardRaw) - return leaderboardRaw + try { + const leaderboardRaw: profileRawLeaderboardItem[] = (await profileLeaderboardsCollection + .find(query) + .sort(sortQuery) + .limit(leaderboardMax) + .toArray()) + .map((i: DatabaseProfileLeaderboardItem): profileRawLeaderboardItem => { + return { + players: i.players, + uuid: i.uuid, + value: i.stats[name] + } + }) + fetchingRawLeaderboardNames.delete(name) + + cachedRawLeaderboards.set(name, leaderboardRaw) + return leaderboardRaw + } catch (e) { + // if it fails while fetching, remove it from fetchingRawLeaderboardNames + fetchingRawLeaderboardNames.delete(name) + throw e + } } interface MemberLeaderboard { -- cgit