feat: public blitzkrieg-db

This commit is contained in:
TrèsAbhi committed 2023-11-07 11:36:08 -06:00
1 parent 0b9db21c10
commit dfe1e37592
7 files changed
+38 -124

No files matched your search

+4 -4
View File
@@ -22,8 +22,8 @@ import { getAccountInfo } from '../../../core/blitz/getAccountInfo';
import { getClanAccountInfo } from '../../../core/blitz/getClanAccountInfo'; import { getClanAccountInfo } from '../../../core/blitz/getClanAccountInfo';
import getRatingsInfo from '../../../core/blitz/getRatingsInfo'; import getRatingsInfo from '../../../core/blitz/getRatingsInfo';
import { AccountList } from '../../../core/blitz/searchPlayersAcrossRegions'; import { AccountList } from '../../../core/blitz/searchPlayersAcrossRegions';
import getArchivedRatingsInfoAPI from '../../../core/blitzkrieg/getArchivedRatingsInfoAPI'; import getArchivedRatingsInfo from '../../../core/blitzkrieg/getArchivedRatingsInfo';
import { getArchivedRatingsLeaderboardAPI } from '../../../core/blitzkrieg/getArchivedRatingsLeaderboardAPI'; import { getArchivedRatingsLeaderboard } from '../../../core/blitzkrieg/getArchivedRatingsLeaderboard';
import { numberFetcher } from '../../../core/blitzkrieg/numberFetcher'; import { numberFetcher } from '../../../core/blitzkrieg/numberFetcher';
import { noArrows } from './page.css'; import { noArrows } from './page.css';
@@ -56,7 +56,7 @@ export default function Page() {
() => () =>
season === null season === null
? getRatingsInfo(region) ? getRatingsInfo(region)
: getArchivedRatingsInfoAPI(region, season), : getArchivedRatingsInfo(region, season),
); );
const [jumpToLeague, setJumpToLeague] = useState(0); const [jumpToLeague, setJumpToLeague] = useState(0);
const { data: latestArchivedSeasonNumber } = useSWR<number>( const { data: latestArchivedSeasonNumber } = useSWR<number>(
@@ -68,7 +68,7 @@ export default function Page() {
// i'll deal with this later // i'll deal with this later
return null; return null;
} else { } else {
return getArchivedRatingsLeaderboardAPI(region, season); return getArchivedRatingsLeaderboard(region, season);
} }
}); });
const [page, setPage] = useState(0); const [page, setPage] = useState(0);
@@ -1,25 +1,33 @@
import { DATABASE_REPO } from './getArchivedRatingsMidnightLeaderboard'; import getRatingsInfo from '../blitz/getRatingsInfo';
import { octokit } from './octokit';
let cachedLatestArchivedSeasonNumber: number | null = null; let cachedLatestArchivedSeasonNumber: number | null = null;
export async function getArchivedLatestSeasonNumber() { export async function getArchivedLatestSeasonNumber() {
if (cachedLatestArchivedSeasonNumber) { const ratingsInfo = await getRatingsInfo('com');
return cachedLatestArchivedSeasonNumber;
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 { data } = await octokit.repos.getContent({ const ratingsURL = (
...DATABASE_REPO, (await fetch(comURL).then((response) => response.json())) as {
path: 'com/ratings', tree: [{ url: string }];
});
if (!Array.isArray(data)) {
throw new Error('Archived ratings data is malformed');
} }
).tree[0].url;
cachedLatestArchivedSeasonNumber = Math.max( const latestSeason = Math.max(
...data.map(({ name }) => parseInt(name)), ...(
(await fetch(ratingsURL).then((response) => {
response.json();
})) as { tree: { path: string }[] }
).tree.map(({ path }) => parseInt(path)),
); );
return cachedLatestArchivedSeasonNumber; return latestSeason;
} else {
return ratingsInfo.current_season - 1;
}
} }
+4 -12
View File
@@ -1,7 +1,5 @@
import { RatingsInfo } from '../../commands/ratings'; import { RatingsInfo } from '../../commands/ratings';
import { Region } from '../../constants/regions'; import { Region } from '../../constants/regions';
import { DATABASE_REPO } from './getArchivedRatingsMidnightLeaderboard';
import { octokit } from './octokit';
const INFO_CACHE: Record< const INFO_CACHE: Record<
Region, Region,
@@ -25,16 +23,10 @@ export default async function getArchivedRatingsInfo(
return INFO_CACHE[region][season]; return INFO_CACHE[region][season];
} }
const { data } = await octokit.repos.getContent({ const response = await fetch(
...DATABASE_REPO, `https://raw.githubusercontent.com/tresabhi/blitzkrieg-db/main/${region}/ratings/${season}/info.json`,
path: `${region}/ratings/${season}/info.json`, );
}); const jsonContent = (await response.json()) as RatingsInfo & {
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 & {
detail: undefined; detail: undefined;
}; };
@@ -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;
}
@@ -1,7 +1,5 @@
import { BlitzkriegRatingsLeaderboard } from '../../../scripts/buildRatingsLeaderboard'; import { BlitzkriegRatingsLeaderboard } from '../../../scripts/buildRatingsLeaderboard';
import { Region } from '../../constants/regions'; import { Region } from '../../constants/regions';
import { DATABASE_REPO } from './getArchivedRatingsMidnightLeaderboard';
import { octokit } from './octokit';
const LEADERBOARD_CACHE: Record< const LEADERBOARD_CACHE: Record<
Region, Region,
@@ -20,18 +18,10 @@ export async function getArchivedRatingsLeaderboard(
return LEADERBOARD_CACHE[region][season]; return LEADERBOARD_CACHE[region][season];
} }
const { data } = await octokit.repos.getContent({ const response = await fetch(
...DATABASE_REPO, `https://raw.githubusercontent.com/tresabhi/blitzkrieg-db/main/${region}/ratings/${season}/latest.json`,
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 json = (await response.json()) as BlitzkriegRatingsLeaderboard; const json = (await response.json()) as BlitzkriegRatingsLeaderboard;
LEADERBOARD_CACHE[region][season] = json; LEADERBOARD_CACHE[region][season] = json;
return json; return json;
@@ -1,29 +0,0 @@
import { BlitzkriegRatingsLeaderboard } from '../../../scripts/buildRatingsLeaderboard';
import { Region } from '../../constants/regions';
const LEADERBOARD_CACHE: Record<
Region,
Record<number, BlitzkriegRatingsLeaderboard>
> = {
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;
}
@@ -1,6 +1,5 @@
import { BlitzkriegRatingsLeaderboard } from '../../../scripts/buildRatingsLeaderboard'; import { BlitzkriegRatingsLeaderboard } from '../../../scripts/buildRatingsLeaderboard';
import { Region } from '../../constants/regions'; import { Region } from '../../constants/regions';
import { octokit } from './octokit';
export const DATABASE_REPO = { owner: 'tresabhi', repo: 'blitzkrieg-db' }; export const DATABASE_REPO = { owner: 'tresabhi', repo: 'blitzkrieg-db' };
@@ -22,19 +21,13 @@ export default async function getArchivedRatingsMidnightLeaderboard(
} }
try { try {
const { data } = await octokit.repos.getContent({ const response = await fetch(
...DATABASE_REPO, `https://raw.githubusercontent.com/tresabhi/blitzkrieg-db/main/${region}/ratings/${season}/midnight.json`,
path: `${region}/ratings/${season}/midnight.json`, );
});
if (!Array.isArray(data) && data.type === 'file') {
const response = await fetch(data.download_url!);
const json = (await response.json()) as BlitzkriegRatingsLeaderboard; const json = (await response.json()) as BlitzkriegRatingsLeaderboard;
MIDNIGHT_LEADERBOARD_CACHE[region][season] = json; MIDNIGHT_LEADERBOARD_CACHE[region][season] = json;
return json; return json;
}
} catch (error) { } catch (error) {
console.warn( console.warn(
`No midnight leaderboard found for season ${season}, region ${region}`, `No midnight leaderboard found for season ${season}, region ${region}`,