fix: use sort=latest for home page books and series queries
All checks were successful
Build, Push & Deploy / deploy (push) Successful in 6m48s

Use the API's sort parameter to explicitly request most recently added
items. Simplify latest series fetch by using /series?sort=latest instead
of N+1 calls per library.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-15 21:45:57 +01:00
parent feceb61e30
commit 11da2335cd

View File

@@ -222,11 +222,11 @@ export class StripstreamProvider implements IMediaProvider {
async getHomeData(): Promise<HomeData> { async getHomeData(): Promise<HomeData> {
const homeOpts = { revalidate: CACHE_TTL_MED, tags: [HOME_CACHE_TAG] }; const homeOpts = { revalidate: CACHE_TTL_MED, tags: [HOME_CACHE_TAG] };
const [ongoingBooksResult, ongoingSeriesResult, booksPage, libraries] = await Promise.allSettled([ const [ongoingBooksResult, ongoingSeriesResult, booksPage, latestSeriesResult] = await Promise.allSettled([
this.client.fetch<StripstreamBookItem[]>("books/ongoing", { limit: "20" }, homeOpts), this.client.fetch<StripstreamBookItem[]>("books/ongoing", { limit: "20" }, homeOpts),
this.client.fetch<StripstreamSeriesItem[]>("series/ongoing", { limit: "10" }, homeOpts), this.client.fetch<StripstreamSeriesItem[]>("series/ongoing", { limit: "10" }, homeOpts),
this.client.fetch<StripstreamBooksPage>("books", { limit: "10" }, homeOpts), this.client.fetch<StripstreamBooksPage>("books", { sort: "latest", limit: "10" }, homeOpts),
this.client.fetch<StripstreamLibraryResponse[]>("libraries", undefined, { revalidate: CACHE_TTL_LONG, tags: [HOME_CACHE_TAG] }), this.client.fetch<StripstreamSeriesPage>("series", { sort: "latest", limit: "10" }, homeOpts),
]); ]);
// /books/ongoing returns both currently reading and next unread per series // /books/ongoing returns both currently reading and next unread per series
@@ -242,23 +242,9 @@ export class StripstreamProvider implements IMediaProvider {
? booksPage.value.items.map(StripstreamAdapter.toNormalizedBook) ? booksPage.value.items.map(StripstreamAdapter.toNormalizedBook)
: []; : [];
let latestSeries: NormalizedSeries[] = []; const latestSeries = latestSeriesResult.status === "fulfilled"
if (libraries.status === "fulfilled" && libraries.value.length > 0) { ? latestSeriesResult.value.items.map(StripstreamAdapter.toNormalizedSeries)
const allSeriesResults = await Promise.allSettled( : [];
libraries.value.map((lib) =>
this.client.fetch<StripstreamSeriesPage>(
`libraries/${lib.id}/series`,
{ limit: "10" },
homeOpts
)
)
);
latestSeries = allSeriesResults
.filter((r): r is PromiseFulfilledResult<StripstreamSeriesPage> => r.status === "fulfilled")
.flatMap((r) => r.value.items)
.map(StripstreamAdapter.toNormalizedSeries)
.slice(0, 10);
}
return { return {
ongoing: ongoingSeries, ongoing: ongoingSeries,