aboutsummaryrefslogtreecommitdiff
path: root/src/database.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/database.ts')
-rw-r--r--src/database.ts75
1 files changed, 44 insertions, 31 deletions
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<memberRawLeaderb
sortQuery[`stats.${name}`] = isLeaderboardReversed(name) ? 1 : -1
fetchingRawLeaderboardNames.add(name)
- 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
+
+ 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<profileRawLeaderboardItem[]> {
@@ -351,22 +358,28 @@ async function fetchProfileLeaderboardRaw(name: string): Promise<profileRawLeade
sortQuery[`stats.${name}`] = isLeaderboardReversed(name) ? 1 : -1
fetchingRawLeaderboardNames.add(name)
- 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
+ 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 {