fix(ssr): only use 1 network request to fetch map ids
All checks were successful
deploy / deploy (push) Successful in 58s

This commit is contained in:
Lee 2023-11-08 22:24:38 +00:00
parent 3dd2fc48ad
commit af707a8c79
2 changed files with 26 additions and 21 deletions

@ -19,14 +19,15 @@ export async function GET(request: Request) {
const map = await BeatsaverAPI.fetchMapByHash(mapHash); const map = await BeatsaverAPI.fetchMapByHash(mapHash);
if (map) { if (map) {
maps[mapHash] = map; maps[mapHash] = map;
mapCache.set(mapHash, map);
} }
if (map && idOnly) { if (map && idOnly) {
maps[mapHash] = { id: map.id }; maps[mapHash] = { id: map.id };
} }
} }
}
return new Response(JSON.stringify(maps), { return new Response(JSON.stringify(maps), {
headers: { "content-type": "application/json;charset=UTF-8" }, headers: { "content-type": "application/json;charset=UTF-8" },
}); });
}
} }

@ -162,25 +162,29 @@ async function fetchScoresWithBeatsaverData(
string, string,
ScoresaberScoreWithBeatsaverData ScoresaberScoreWithBeatsaverData
> = {}; > = {};
for (const score of scores) {
const mapResponse = await fetch( let url = `${
`${
isProduction() ? ssrSettings.siteUrl : "http://localhost:3000" isProduction() ? ssrSettings.siteUrl : "http://localhost:3000"
}/api/beatsaver/mapdata?hashes=${score.leaderboard.songHash}&idonly=true`, }/api/beatsaver/mapdata?hashes=`;
{ for (const score of scores) {
url += `${score.leaderboard.songHash},`;
}
const mapResponse = await fetch(url, {
next: { next: {
revalidate: 60 * 60 * 24 * 7, // 1 week revalidate: 60 * 60 * 24 * 7, // 1 week
}, },
}, });
); const mapJson = await mapResponse.json();
const mapData = await mapResponse.json(); for (const score of scores) {
const mapId = mapData[score.leaderboard.songHash].id; const mapData = mapJson[score.leaderboard.songHash];
scoresWithBeatsaverData[score.score.id] = { if (mapData) {
scoresWithBeatsaverData[score.leaderboard.songHash] = {
score: score.score, score: score.score,
leaderboard: score.leaderboard, leaderboard: score.leaderboard,
mapId: mapId, mapId: mapData.id,
}; };
} }
}
return { return {
scores: scoresWithBeatsaverData, scores: scoresWithBeatsaverData,