From 129befd15e9b179dd143bd1f43d01ff2aff7b1c2 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Mon, 6 Sep 2021 09:03:04 -0400 Subject: [PATCH] hack for leaderboard --- .../src/v2/view/leaderboard/LeaderboardFc.tsx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/vocodes/src/v2/view/leaderboard/LeaderboardFc.tsx b/vocodes/src/v2/view/leaderboard/LeaderboardFc.tsx index f5fd7a405b..9a6460fc06 100644 --- a/vocodes/src/v2/view/leaderboard/LeaderboardFc.tsx +++ b/vocodes/src/v2/view/leaderboard/LeaderboardFc.tsx @@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import { FrontendUrlConfig } from '../../../common/FrontendUrlConfig'; import { SessionWrapper } from '../../../session/SessionWrapper'; -import { GetLeaderboard, GetLeaderboardIsOk, Leaderboard, LeaderboardEntryForList } from '../../api/misc/GetLeaderboard'; +import { GetLeaderboard, GetLeaderboardIsErr, GetLeaderboardIsOk, Leaderboard, LeaderboardEntryForList, LeaderboardLookupError } from '../../api/misc/GetLeaderboard'; import { GravatarFc } from '../_common/GravatarFc'; interface Props { @@ -13,6 +13,7 @@ function LeaderboardFc(props: Props) { const [leaderboard, setLeaderboard] = useState(undefined); const [ttsLeaderboard, setTtsLeaderboard] = useState|undefined>(undefined); const [w2lLeaderboard, setW2lLeaderboard] = useState|undefined>(undefined); + const [retryCount, setRetryCount] = useState(0); const getLeaderboard = useCallback(async () => { const leaderboardReponse = await GetLeaderboard(); @@ -21,9 +22,19 @@ function LeaderboardFc(props: Props) { setLeaderboard(leaderboardReponse); setTtsLeaderboard(leaderboardReponse.tts_leaderboard); setW2lLeaderboard(leaderboardReponse.w2l_leaderboard); - } else { + } else if (GetLeaderboardIsErr(leaderboardReponse)) { + switch(leaderboardReponse) { + // TODO: There's an issue with the queries not returning before the deadline. + // I should add a Redis TTL cache to store the results and an async job to warm the cache. + case LeaderboardLookupError.NotFound: + if (retryCount < 3) { + setTimeout(() => getLeaderboard(), 1000); + setRetryCount(retryCount+1); + } + break; + } } - }, []); + }, [retryCount]); useEffect(() => { getLeaderboard();