diff --git a/src/app/tools/ratings/page.tsx b/src/app/tools/ratings/page.tsx index e5f9d510b..2c9cdd452 100644 --- a/src/app/tools/ratings/page.tsx +++ b/src/app/tools/ratings/page.tsx @@ -22,8 +22,8 @@ import { getAccountInfo } from '../../../core/blitz/getAccountInfo'; import { getClanAccountInfo } from '../../../core/blitz/getClanAccountInfo'; import getRatingsInfo from '../../../core/blitz/getRatingsInfo'; import { AccountList } from '../../../core/blitz/searchPlayersAcrossRegions'; -import getArchivedRatingsInfoAPI from '../../../core/blitzkrieg/getArchivedRatingsInfoAPI'; -import { getArchivedRatingsLeaderboardAPI } from '../../../core/blitzkrieg/getArchivedRatingsLeaderboardAPI'; +import getArchivedRatingsInfo from '../../../core/blitzkrieg/getArchivedRatingsInfo'; +import { getArchivedRatingsLeaderboard } from '../../../core/blitzkrieg/getArchivedRatingsLeaderboard'; import { numberFetcher } from '../../../core/blitzkrieg/numberFetcher'; import { noArrows } from './page.css'; @@ -56,7 +56,7 @@ export default function Page() { () => season === null ? getRatingsInfo(region) - : getArchivedRatingsInfoAPI(region, season), + : getArchivedRatingsInfo(region, season), ); const [jumpToLeague, setJumpToLeague] = useState(0); const { data: latestArchivedSeasonNumber } = useSWR( @@ -68,7 +68,7 @@ export default function Page() { // i'll deal with this later return null; } else { - return getArchivedRatingsLeaderboardAPI(region, season); + return getArchivedRatingsLeaderboard(region, season); } }); const [page, setPage] = useState(0); diff --git a/src/core/blitzkrieg/getArchivedLatestSeasonNumber.ts b/src/core/blitzkrieg/getArchivedLatestSeasonNumber.ts index e3ba0cf51..8d508e0e1 100644 --- a/src/core/blitzkrieg/getArchivedLatestSeasonNumber.ts +++ b/src/core/blitzkrieg/getArchivedLatestSeasonNumber.ts @@ -1,25 +1,33 @@ -import { DATABASE_REPO } from './getArchivedRatingsMidnightLeaderboard'; -import { octokit } from './octokit'; +import getRatingsInfo from '../blitz/getRatingsInfo'; let cachedLatestArchivedSeasonNumber: number | null = null; export async function getArchivedLatestSeasonNumber() { - if (cachedLatestArchivedSeasonNumber) { - return cachedLatestArchivedSeasonNumber; + const ratingsInfo = await getRatingsInfo('com'); + + if (ratingsInfo.detail) { + const comURL = ( + (await fetch( + 'https://api.github.com/repos/tresabhi/blitzkrieg-db/git/trees/main', + ).then((response) => response.json())) as { + tree: { path: string; url: string }[]; + } + ).tree.find(({ path }) => path === 'com')!.url; + const ratingsURL = ( + (await fetch(comURL).then((response) => response.json())) as { + tree: [{ url: string }]; + } + ).tree[0].url; + const latestSeason = Math.max( + ...( + (await fetch(ratingsURL).then((response) => { + response.json(); + })) as { tree: { path: string }[] } + ).tree.map(({ path }) => parseInt(path)), + ); + + return latestSeason; + } else { + return ratingsInfo.current_season - 1; } - - const { data } = await octokit.repos.getContent({ - ...DATABASE_REPO, - path: 'com/ratings', - }); - - if (!Array.isArray(data)) { - throw new Error('Archived ratings data is malformed'); - } - - cachedLatestArchivedSeasonNumber = Math.max( - ...data.map(({ name }) => parseInt(name)), - ); - - return cachedLatestArchivedSeasonNumber; } diff --git a/src/core/blitzkrieg/getArchivedRatingsInfo.ts b/src/core/blitzkrieg/getArchivedRatingsInfo.ts index 76f85908b..e08b9793a 100644 --- a/src/core/blitzkrieg/getArchivedRatingsInfo.ts +++ b/src/core/blitzkrieg/getArchivedRatingsInfo.ts @@ -1,7 +1,5 @@ import { RatingsInfo } from '../../commands/ratings'; import { Region } from '../../constants/regions'; -import { DATABASE_REPO } from './getArchivedRatingsMidnightLeaderboard'; -import { octokit } from './octokit'; const INFO_CACHE: Record< Region, @@ -25,16 +23,10 @@ export default async function getArchivedRatingsInfo( return INFO_CACHE[region][season]; } - const { data } = await octokit.repos.getContent({ - ...DATABASE_REPO, - path: `${region}/ratings/${season}/info.json`, - }); - - if (Array.isArray(data) || data.type !== 'file') - throw new Error('Archived ratings info is malformed'); - - const content = Buffer.from(data.content, 'base64').toString(); - const jsonContent = JSON.parse(content) as RatingsInfo & { + const response = await fetch( + `https://raw.githubusercontent.com/tresabhi/blitzkrieg-db/main/${region}/ratings/${season}/info.json`, + ); + const jsonContent = (await response.json()) as RatingsInfo & { detail: undefined; }; diff --git a/src/core/blitzkrieg/getArchivedRatingsInfoAPI.ts b/src/core/blitzkrieg/getArchivedRatingsInfoAPI.ts deleted file mode 100644 index 89cc631c5..000000000 --- a/src/core/blitzkrieg/getArchivedRatingsInfoAPI.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { RatingsInfo } from '../../commands/ratings'; -import { Region } from '../../constants/regions'; - -const INFO_CACHE: Record< - Region, - Record< - number, - RatingsInfo & { - detail: undefined; - } - > -> = { - com: {}, - eu: {}, - asia: {}, -}; - -export default async function getArchivedRatingsInfoAPI( - region: Region, - season: number, -) { - if (INFO_CACHE[region][season]) { - return INFO_CACHE[region][season]; - } - - const response = await fetch( - `/api/ratings/archives/${region}/${season}/info`, - ); - const json = (await response.json()) as RatingsInfo; - - if (json.detail) { - throw new Error( - `No ratings info found for season ${season}, region ${region}`, - ); - } - - INFO_CACHE[region][season] = json; - - return json; -} diff --git a/src/core/blitzkrieg/getArchivedRatingsLeaderboard.ts b/src/core/blitzkrieg/getArchivedRatingsLeaderboard.ts index c253ea094..29e59e56e 100644 --- a/src/core/blitzkrieg/getArchivedRatingsLeaderboard.ts +++ b/src/core/blitzkrieg/getArchivedRatingsLeaderboard.ts @@ -1,7 +1,5 @@ import { BlitzkriegRatingsLeaderboard } from '../../../scripts/buildRatingsLeaderboard'; import { Region } from '../../constants/regions'; -import { DATABASE_REPO } from './getArchivedRatingsMidnightLeaderboard'; -import { octokit } from './octokit'; const LEADERBOARD_CACHE: Record< Region, @@ -20,18 +18,10 @@ export async function getArchivedRatingsLeaderboard( return LEADERBOARD_CACHE[region][season]; } - const { data } = await octokit.repos.getContent({ - ...DATABASE_REPO, - path: `${region}/ratings/${season}/latest.json`, - }); - - if (Array.isArray(data) || data.type !== 'file') { - throw new Error('Archived ratings data is malformed'); - } - - const response = await fetch(data.download_url!); + const response = await fetch( + `https://raw.githubusercontent.com/tresabhi/blitzkrieg-db/main/${region}/ratings/${season}/latest.json`, + ); const json = (await response.json()) as BlitzkriegRatingsLeaderboard; - LEADERBOARD_CACHE[region][season] = json; return json; diff --git a/src/core/blitzkrieg/getArchivedRatingsLeaderboardAPI.ts b/src/core/blitzkrieg/getArchivedRatingsLeaderboardAPI.ts deleted file mode 100644 index 410661277..000000000 --- a/src/core/blitzkrieg/getArchivedRatingsLeaderboardAPI.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { BlitzkriegRatingsLeaderboard } from '../../../scripts/buildRatingsLeaderboard'; -import { Region } from '../../constants/regions'; - -const LEADERBOARD_CACHE: Record< - Region, - Record -> = { - asia: {}, - eu: {}, - com: {}, -}; - -export async function getArchivedRatingsLeaderboardAPI( - region: Region, - season: number, -) { - if (LEADERBOARD_CACHE[region][season]) { - return LEADERBOARD_CACHE[region][season]; - } - - const response = await fetch( - `/api/ratings/archives/${region}/${season}/latest`, - ); - const json = (await response.json()) as BlitzkriegRatingsLeaderboard; - - LEADERBOARD_CACHE[region][season] = json; - - return json; -} diff --git a/src/core/blitzkrieg/getArchivedRatingsMidnightLeaderboard.ts b/src/core/blitzkrieg/getArchivedRatingsMidnightLeaderboard.ts index 392169365..85c7029b0 100644 --- a/src/core/blitzkrieg/getArchivedRatingsMidnightLeaderboard.ts +++ b/src/core/blitzkrieg/getArchivedRatingsMidnightLeaderboard.ts @@ -1,6 +1,5 @@ import { BlitzkriegRatingsLeaderboard } from '../../../scripts/buildRatingsLeaderboard'; import { Region } from '../../constants/regions'; -import { octokit } from './octokit'; export const DATABASE_REPO = { owner: 'tresabhi', repo: 'blitzkrieg-db' }; @@ -22,19 +21,13 @@ export default async function getArchivedRatingsMidnightLeaderboard( } try { - const { data } = await octokit.repos.getContent({ - ...DATABASE_REPO, - path: `${region}/ratings/${season}/midnight.json`, - }); + const response = await fetch( + `https://raw.githubusercontent.com/tresabhi/blitzkrieg-db/main/${region}/ratings/${season}/midnight.json`, + ); + const json = (await response.json()) as BlitzkriegRatingsLeaderboard; + MIDNIGHT_LEADERBOARD_CACHE[region][season] = json; - if (!Array.isArray(data) && data.type === 'file') { - const response = await fetch(data.download_url!); - const json = (await response.json()) as BlitzkriegRatingsLeaderboard; - - MIDNIGHT_LEADERBOARD_CACHE[region][season] = json; - - return json; - } + return json; } catch (error) { console.warn( `No midnight leaderboard found for season ${season}, region ${region}`,