fix: steam reviews pagination - fetch more and slice instead of broken cursor

This commit is contained in:
2026-04-30 22:05:42 +08:00
parent d2e40a2696
commit 2620023a96
+11 -4
View File
@@ -77,8 +77,9 @@ export const steamReviewRoutes = new Elysia({ prefix: "/steam-reviews" })
} }
try { try {
// Steam API uses cursor-based pagination, but for simplicity we fetch more and slice
const response = await fetch( const response = await fetch(
`https://store.steampowered.com/appreviews/${game.steamAppId}?json=1&language=${language}&purchase_type=all&num_per_page=${limit}&cursor=${encodeURIComponent(Buffer.from(`${offset}`).toString("base64"))}&filter=recent&review_type=all`, `https://store.steampowered.com/appreviews/${game.steamAppId}?json=1&language=${language}&purchase_type=all&num_per_page=${offset + limit}&filter=recent&review_type=all`,
{ signal: AbortSignal.timeout(10000) } { signal: AbortSignal.timeout(10000) }
) )
@@ -89,10 +90,16 @@ export const steamReviewRoutes = new Elysia({ prefix: "/steam-reviews" })
const data: SteamReviewResponse = await response.json() const data: SteamReviewResponse = await response.json()
// Cache the result // Slice reviews for the requested page
reviewCache.set(cacheKey, { data, expires: Date.now() + CACHE_TTL }) const slicedData = {
...data,
reviews: (data.reviews ?? []).slice(offset, offset + limit),
}
return data // Cache the result
reviewCache.set(cacheKey, { data: slicedData, expires: Date.now() + CACHE_TTL })
return slicedData
} catch (error) { } catch (error) {
set.status = 502 set.status = 502
return { error: "Steam review API unavailable" } return { error: "Steam review API unavailable" }