fix: steam reviews pagination - fetch more and slice instead of broken cursor
This commit is contained in:
@@ -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" }
|
||||||
|
|||||||
Reference in New Issue
Block a user