diff --git a/.vscode/settings.json b/.vscode/settings.json index 55c1b239..a2ca796a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,7 +4,7 @@ "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, "[typescript]": { - "editor.defaultFormatter": "dbaeumer.vscode-eslint" + "editor.defaultFormatter": "vscode.typescript-language-features" }, "[javascript]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" diff --git a/src/features/klant/persoon/service.ts b/src/features/klant/persoon/service.ts index ff9fe1e5..1a668a68 100644 --- a/src/features/klant/persoon/service.ts +++ b/src/features/klant/persoon/service.ts @@ -7,7 +7,7 @@ import { fetchLoggedIn, throwIfNotOk, parseJson, - parsePagination, + parseWithoutPagination, ServiceResult, type ServiceData, enforceOneOrZero, @@ -16,7 +16,7 @@ import { mutate } from "swrv"; import type { Ref } from "vue"; import type { Persoon } from "./types"; -const personenRootUrl = window.gatewayBaseUri + "/api/ingeschrevenpersonen"; +const personenRootUrl = window.gatewayBaseUri + "/api/brp_proxy/ingeschrevenpersonen"; type QueryParam = [string, string][]; @@ -49,18 +49,18 @@ const queryDictionary: PersoonQueryParams = { bsn: (search) => [["burgerservicenummer", search]], geboortedatumAchternaam: (search) => [ [ - "embedded.geboorte.embedded.datumOnvolledig.datum", + "geboorte__datum", formatIsoDate(search.geboortedatum), ], ["embedded.naam.geslachtsnaam", search.achternaam], ], postcodeHuisnummer: ({ postcode, huisnummer }) => [ [ - "embedded.verblijfplaats.postcode", + "verblijfplaats__postcode", `${postcode.numbers}${postcode.digits}`, ], - ["embedded.verblijfplaats.huisnummer[int_compare]", huisnummer], + ["verblijfplaats__huisnummer", huisnummer], ], }; @@ -71,8 +71,8 @@ function getQueryParams(params: PersoonQuery) { } function mapPersoon(json: any): Persoon { - const { verblijfplaats, naam, geboorte } = json?.embedded ?? {}; - const { plaats, land } = geboorte?.embedded ?? {}; + const { verblijfplaats, naam, geboorte } = json ?? {}; + const { plaats, land } = geboorte ?? {}; const { postcode, @@ -83,7 +83,7 @@ function mapPersoon(json: any): Persoon { huisnummertoevoeging, } = verblijfplaats ?? {}; - const datum = geboorte?.embedded?.datumOnvolledig ?? {}; + const datum = geboorte?.datum ?? {}; const geboortedatum = datum && new Date(datum.jaar, datum.maand - 1, datum.dag); @@ -97,9 +97,9 @@ function mapPersoon(json: any): Persoon { voornaam: naam?.voornamen, voorvoegselAchternaam: naam?.voorvoegsel, achternaam: naam?.geslachtsnaam, - geboorteplaats: plaats, - geboorteland: land, - woonplaats, + geboorteplaats: plaats ?? "-", + geboorteland: land ?? "-", + woonplaats: woonplaats ?? "-", straat, huisletter, huisnummertoevoeging, @@ -118,8 +118,6 @@ function getPersoonSearchUrl( url.searchParams.set(...tuple); }); - url.searchParams.set("extend[]", "all"); - if (page !== undefined && page !== 1) { url.searchParams.set("_page", page.toString()); } @@ -131,7 +129,6 @@ function getPersoonUrlByBsn(bsn: string) { if (!bsn) return ""; const url = new URL(personenRootUrl); url.searchParams.set("burgerservicenummer", bsn); - url.searchParams.set("extend[]", "all"); return url.toString(); } @@ -148,7 +145,7 @@ export const searchPersonen = (url: string) => { return fetchLoggedIn(url) .then(throwIfNotOk) .then(parseJson) - .then((p) => parsePagination(p, mapPersoon)) + .then((p) => parseWithoutPagination(p, mapPersoon)) .then((p) => { p.page.forEach((persoon) => { const key = getPersoonUniqueBsnId(persoon.bsn); diff --git a/src/services/gateway.ts b/src/services/gateway.ts index 9b1672ba..745567f7 100644 --- a/src/services/gateway.ts +++ b/src/services/gateway.ts @@ -30,6 +30,34 @@ export async function parsePagination( }; } +export async function parseWithoutPagination( + json: unknown, + map: (jObj: unknown) => T +): Promise>> { + const { _embedded } = json as { + [key: string]: any; + }; + + if ( + !Array.isArray(_embedded?.ingeschrevenpersonen) + + ) + throw new Error( + "unexpected in gateway json. expected pagination: " + JSON.stringify(json) + ); + + // just in case the mapper is async, we wrap the result in a Promise + const promises = _embedded?.ingeschrevenpersonen.map((x: any) => Promise.resolve(map(x))); + + return { + page: await Promise.all(promises), + pageNumber: 1, + pageSize: promises.length, + totalPages: 1, + totalRecords: promises.length, + }; +} + //date format helper: 2005-12-30UTC01:02:03 export const getFormattedUtcDate = () => { const formatDateTimeElement = (x: number) => ("0" + x).slice(-2);