Skip to content

Commit

Permalink
Merge pull request #795 from navikt/use-distance-filter-for-saved-sea…
Browse files Browse the repository at this point in the history
…rches

Fix: Use distance filter for saved searches
  • Loading branch information
ChristofferKarlsson authored Sep 18, 2024
2 parents 45a3de6 + cddde68 commit 114b550
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ We can't use the built-in 'cache' in React either, since the route segment is dy
https://nextjs.org/docs/app/building-your-application/data-fetching/fetching-caching-and-revalidating#fetching-data-on-the-server-with-third-party-libraries
*/

async function fetchElasticSearch(query) {
export async function fetchElasticSearch(query, fetchOptions = {}) {
const elasticSearchQuery = query;
const shouldLookupLocationsWithinDrivingDistance = elasticSearchQuery.postcode && elasticSearchQuery.distance;

Expand All @@ -33,12 +33,27 @@ async function fetchElasticSearch(query) {
method: "POST",
headers: getDefaultHeaders(),
body: JSON.stringify(body),
...fetchOptions,
});

measureSearchDuration();

incrementElasticSearchRequests(res.ok);

return res;
}

export const fetchCachedSimplifiedElasticSearch = unstable_cache(
async (query) => fetchSimplifiedElasticSearch(query),
["elastic-search-query"],
{
revalidate: 60,
},
);

async function fetchSimplifiedElasticSearch(query) {
const res = await fetchElasticSearch(query);

if (!res.ok) {
throw new Error(`Failed to fetch data: ${res.status}`);
}
Expand All @@ -47,11 +62,3 @@ async function fetchElasticSearch(query) {

return simplifySearchResponse(data);
}

export const fetchCachedElasticSearch = unstable_cache(
async (query) => fetchElasticSearch(query),
["elastic-search-query"],
{
revalidate: 60,
},
);
6 changes: 3 additions & 3 deletions src/app/(sok)/page.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
toApiQuery,
toBrowserQuery,
} from "@/app/(sok)/_utils/query";
import { fetchCachedElasticSearch } from "@/app/(sok)/_utils/fetchCachedElasticSearch";
import { fetchCachedSimplifiedElasticSearch } from "@/app/(sok)/_utils/fetchElasticSearch";
import * as actions from "@/app/_common/actions";
import { redirect } from "next/navigation";
import { migrateSearchParams } from "@/app/(sok)/_utils/searchParamsVersioning";
Expand Down Expand Up @@ -111,12 +111,12 @@ export default async function Page({ searchParams }) {

const shouldDoExtraCallIfUserHasSearchParams = Object.keys(toBrowserQuery(initialQuery)).length > 0;
const fetchCalls = [
fetchCachedElasticSearch(toApiQuery(defaultQuery)),
fetchCachedSimplifiedElasticSearch(toApiQuery(defaultQuery)),
fetchCachedLocations(),
fetchCachedPostcodes(),
];
if (shouldDoExtraCallIfUserHasSearchParams) {
fetchCalls.push(fetchCachedElasticSearch(toApiQuery(initialQuery)));
fetchCalls.push(fetchCachedSimplifiedElasticSearch(toApiQuery(initialQuery)));
}

const [globalSearchResult, locations, postcodes, searchResult] = await Promise.all(fetchCalls);
Expand Down
13 changes: 3 additions & 10 deletions src/app/api/search/route.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import elasticSearchRequestBody from "@/app/(sok)/_utils/elasticSearchRequestBody";
import { createQuery, toApiQuery } from "@/app/(sok)/_utils/query";
import { getDefaultHeaders } from "@/app/_common/utils/fetch";
import { migrateSearchParams } from "@/app/(sok)/_utils/searchParamsVersioning";
import { NextResponse } from "next/server";
import logger from "@/app/_common/utils/logger";
import { fetchElasticSearch } from "@/app/(sok)/_utils/fetchElasticSearch";

export const dynamic = "force-dynamic";

Expand All @@ -30,16 +29,10 @@ function parseSearchParams(entries) {
export async function GET(request) {
const searchParams = parseSearchParams(request.nextUrl.searchParams);
const migratedSearchParams = migrateSearchParams(searchParams);
const query = createQuery(migratedSearchParams || searchParams);
const body = elasticSearchRequestBody(toApiQuery(query));
const query = toApiQuery(createQuery(migratedSearchParams || searchParams));

try {
const res = await fetch(`${process.env.PAMSEARCHAPI_URL}/stillingsok/ad/_search`, {
method: "POST",
headers: getDefaultHeaders(),
body: JSON.stringify(body),
signal: AbortSignal.timeout(55 * 1000),
});
const res = await fetchElasticSearch(query, { signal: AbortSignal.timeout(55 * 1000) });

if (!res.ok) {
const msg = `Kallet returnerte en feilkode, sender tilbake den samme feilkoden: ${res.status}`;
Expand Down

0 comments on commit 114b550

Please sign in to comment.