mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-24 03:59:50 +02:00
feat: public blitzkrieg-db
This commit is contained in:
1 parent
0b9db21c10
commit
dfe1e37592
7 files changed
+38
-124
No files matched your search
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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}`,
|
||||||
|
|||||||
Reference in new issue
Block a user