diff --git a/app/betterplace.ts b/app/betterplace.ts index 03153ccbbe0485770078b5ce9361814b5239f9eb..d65eb850b5d2653a3cefdf6e893b1b32f7e396a2 100644 --- a/app/betterplace.ts +++ b/app/betterplace.ts @@ -256,24 +256,6 @@ const randomPageForToday = () => (new Date().setUTCHours(0, 0, 0, 0) / 100000) % MAX_PAGE_FOR_RANDOMIZATION + 2; -const fetchRandomPage = ( - pageNumber: number, - language: BetterPlaceLanguage = DEFAULT_LANGUAGE, -): Promise<ProjectsResponse> => { - logger.info(`fetching random projects from page ${pageNumber}`); - const start = Date.now(); - return fetchPageOfProjects({ - offset: pageNumber * DEFAULT_PAGE_SIZE, - limit: DEFAULT_PAGE_SIZE, - }, language) - .finally(() => { - const duration = Date.now() - start; - logger.debug( - `fetching random projects from page ${pageNumber} took ${duration} ms`, - ); - }); -}; - export const fetchProjects = ( { offset = 0, limit = DEFAULT_PAGE_SIZE, location }: ProjectsParameters, language: BetterPlaceLanguage = DEFAULT_LANGUAGE, @@ -283,11 +265,14 @@ export const fetchProjects = ( const isFiltering = !!location; const isFirstPageOfUnfilteredList = offset < limit && !isFiltering; if (isFirstPageOfUnfilteredList) { - return fetchRandomPage(randomPage, language) - .then((result) => ({ - ...result, - data: result.data.slice(0, limit), - })); + logger.info(`fetching random projects from page ${randomPage}`); + return fetchPageOfProjects({ + offset: randomPage * DEFAULT_PAGE_SIZE, + limit: DEFAULT_PAGE_SIZE, + }, language).then((result) => ({ + ...result, + data: result.data.slice(0, limit), + })); } // After one randomly selected page, "normal" pagination starts with offset 0 and skips the random page that was already displayed const afterRandomPage = offset > randomPage * DEFAULT_PAGE_SIZE; diff --git a/app/betterplace_test.ts b/app/betterplace_test.ts index 35c2d0c5213b090e34618befe63eeaae94d31336..47d01d56939f469528f5969af0077179cf55c419 100644 --- a/app/betterplace_test.ts +++ b/app/betterplace_test.ts @@ -43,6 +43,9 @@ const emptyResponse = { type UrlPrefix = string; +const projectsUrlWithDefaultOptions = + "https://api.betterplace.org/de/api_v4/projects.json?facets=completed%3Afalse%7Cclosed%3Afalse%7Cprohibit_donations%3Afalse&order=rank%3ADESC"; + const stubFetchByUrlPrefix = ( responses: Record<UrlPrefix, ResponsePayload>, ) => { @@ -175,10 +178,7 @@ const queryProject = async ( }; const urlForPage = (page = 1, pageSize = 10) => - new URL( - "https://api.betterplace.org/de/api_v4/projects.json?" + - `facets=completed%3Afalse%7Cclosed%3Afalse%7Cprohibit_donations%3Afalse&order=rank%3ADESC&page=${page}&per_page=${pageSize}`, - ); + new URL(`${projectsUrlWithDefaultOptions}&page=${page}&per_page=${pageSize}`); describe("betterplace", () => { let fetchStub: Stub; @@ -209,9 +209,8 @@ describe("betterplace", () => { await fetchProjects({ limit: 10, offset: 20, location: "Hamburg" }, "de"); const expectedUrl = new URL( - "https://api.betterplace.org/de/api_v4/projects.json?" + - "facets=completed%3Afalse%7Cclosed%3Afalse%7Cprohibit_donations%3Afalse&order=rank%3ADESC&page=3&per_page=10" + - "&scope=location&q=Hamburg", + projectsUrlWithDefaultOptions + + "&page=3&per_page=10&scope=location&q=Hamburg", ); assertSpyCall(fetchStub, 0, { args: [expectedUrl] }); }); @@ -229,9 +228,8 @@ describe("betterplace", () => { ); const expectedUrl = new URL( - "https://api.betterplace.org/de/api_v4/projects.json?" + - "facets=completed%3Afalse%7Cclosed%3Afalse%7Cprohibit_donations%3Afalse&order=rank%3ADESC&page=3&per_page=10" + - "&scope=location&q=Stra%C3%9Fe+123%2C+20535+Hamburg", + projectsUrlWithDefaultOptions + + "&page=3&per_page=10&scope=location&q=Stra%C3%9Fe+123%2C+20535+Hamburg", ); assertSpyCall(fetchStub, 0, { args: [expectedUrl] }); }); @@ -308,9 +306,8 @@ describe("betterplace", () => { await fetchProjects({ limit: 10, offset: 0, location: "Hamburg" }, "de"); const expectedUrl = new URL( - "https://api.betterplace.org/de/api_v4/projects.json?" + - "facets=completed%3Afalse%7Cclosed%3Afalse%7Cprohibit_donations%3Afalse&order=rank%3ADESC&page=1&per_page=10" + - "&scope=location&q=Hamburg", + projectsUrlWithDefaultOptions + + "&page=1&per_page=10&scope=location&q=Hamburg", ); assertSpyCall(fetchStub, 0, { args: [expectedUrl] }); });