diff --git a/src/app/tools/ratings/page.tsx b/src/app/tools/ratings/page.tsx index 3d3661c09..a60b7a8ac 100644 --- a/src/app/tools/ratings/page.tsx +++ b/src/app/tools/ratings/page.tsx @@ -137,15 +137,12 @@ export default function Page() { await Promise.all( range(0, 5).map(async (league: number) => { const data = await getRatingsLeague(region, league); - leaguePositionCache.current[region][league] = - data.result[0].number - 1; + leaguePositionCache.current[region][league] = data[0].number - 1; return data; }), ) - ) - .map(({ result }) => result) - .flat(); + ).flat(); useLeaderboardCache.setState( produce((draft: LeaderboardCache) => { diff --git a/src/commands/ratings.tsx b/src/commands/ratings.tsx index 347e752b2..d1067e78a 100644 --- a/src/commands/ratings.tsx +++ b/src/commands/ratings.tsx @@ -15,6 +15,8 @@ import { REGION_NAMES_SHORT, Region } from '../constants/regions'; import { getAccountInfo } from '../core/blitz/getAccountInfo'; import { getClanAccountInfo } from '../core/blitz/getClanAccountInfo'; import getRatingsInfo from '../core/blitz/getRatingsInfo'; +import { getRatingsLeague } from '../core/blitz/getRatingsLeague'; +import { getRatingsNeighbors } from '../core/blitz/getRatingsNeighbors'; import regionToRegionSubdomain from '../core/blitz/regionToRegionSubdomain'; import { getArchivedLatestSeasonNumber } from '../core/blitzkrieg/getArchivedLatestSeasonNumber'; import getArchivedRatingsInfo from '../core/blitzkrieg/getArchivedRatingsInfo'; @@ -257,11 +259,8 @@ export const ratingsCommand = new Promise( const regionSubdomain = regionToRegionSubdomain(region); const result = subcommandGroup === 'current' - ? await fetch( - `https://${regionSubdomain}.wotblitz.com/en/api/rating-leaderboards/league/${leagueIndex}/top/`, - ) - .then((response) => response.json() as Promise) - .then(async ({ result }) => + ? await getRatingsLeague(region, leagueIndex).then( + async (result) => result.slice(0, limit).map( (player) => ({ @@ -272,7 +271,7 @@ export const ratingsCommand = new Promise( nickname: player.nickname, }) satisfies SimplifiedPlayer, ), - ) + ) : await getArchivedRatingsLeaderboard(region, season!).then( async (players) => { const firstPlayerIndex = @@ -338,29 +337,24 @@ export const ratingsCommand = new Promise( const accountInfo = await getAccountInfo(region, id); const clan = (await getClanAccountInfo(region, id, ['clan']))?.clan; - const regionSubdomain = regionToRegionSubdomain(region); const neighbors = subcommandGroup === 'current' - ? await fetch( - `https://${regionSubdomain}.wotblitz.com/en/api/rating-leaderboards/user/${id}/?neighbors=${Math.round( - limit / 2, - )}`, + ? await getRatingsNeighbors( + region, + id, + Math.round(limit / 2), + ).then((players) => + players.neighbors.map( + (player) => + ({ + id: player.spa_id, + position: player.number, + score: player.score, + clan: player.clan_tag, + nickname: player.nickname, + }) satisfies SimplifiedPlayer, + ), ) - .then( - (response) => response.json() as Promise, - ) - .then((players) => - players.neighbors.map( - (player) => - ({ - id: player.spa_id, - position: player.number, - score: player.score, - clan: player.clan_tag, - nickname: player.nickname, - }) satisfies SimplifiedPlayer, - ), - ) : await getArchivedRatingsLeaderboard(region, season!).then( async (players) => { const playerIndex = players.findIndex( diff --git a/src/core/blitz/getRatingsLeague.ts b/src/core/blitz/getRatingsLeague.ts index 49445335e..6779cc78b 100644 --- a/src/core/blitz/getRatingsLeague.ts +++ b/src/core/blitz/getRatingsLeague.ts @@ -1,4 +1,4 @@ -import { LeagueTop } from '../../commands/ratings'; +import { LeagueTop, RatingsPlayer } from '../../commands/ratings'; import { Region } from '../../constants/regions'; import { context } from '../blitzkrieg/context'; import { patientFetch } from '../blitzkrieg/patientFetch'; @@ -9,7 +9,10 @@ export async function getRatingsLeague( league: number, usePatientFetcher = false, ) { - const fetcher = usePatientFetcher ? patientFetch : fetch; + const fetcher = (url: string) => + usePatientFetcher + ? patientFetch(url, undefined, { cache: 'no-store' }) + : fetch(url, { cache: 'no-store' }); const response = await fetcher( context === 'website' ? `/api/${region}/ratings/current/league/${league}` @@ -17,7 +20,9 @@ export async function getRatingsLeague( region, )}.wotblitz.com/en/api/rating-leaderboards/league/${league}/top/`, ); - const json = (await response.json()) as LeagueTop; + const json = await response.json(); - return json; + return context === 'website' + ? (json as RatingsPlayer[]) + : (json as LeagueTop).result; } diff --git a/src/core/blitz/getRatingsNeighbors.ts b/src/core/blitz/getRatingsNeighbors.ts index 045cf9a01..2cd33aab9 100644 --- a/src/core/blitz/getRatingsNeighbors.ts +++ b/src/core/blitz/getRatingsNeighbors.ts @@ -10,9 +10,10 @@ export async function getRatingsNeighbors( count: number, usePatientFetcher = false, ) { - const fetcher = usePatientFetcher - ? patientFetch - : (url: string) => fetch(url, { cache: 'no-store' }); + const fetcher = (url: string) => + usePatientFetcher + ? patientFetch(url, undefined, { cache: 'no-store' }) + : fetch(url, { cache: 'no-store' }); const response = await fetcher( withCORSProxy( `https://${regionToRegionSubdomain(