From 44c3898aecf4a069ecc91217d6ae90bc81577589 Mon Sep 17 00:00:00 2001 From: Felix Cornelissen Date: Tue, 12 Nov 2024 14:13:15 +0100 Subject: [PATCH 1/3] fix bevinding bij pc-317 --- src/services/openklant1/service.ts | 33 ++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/services/openklant1/service.ts b/src/services/openklant1/service.ts index df243eb5d..61469b746 100644 --- a/src/services/openklant1/service.ts +++ b/src/services/openklant1/service.ts @@ -434,23 +434,30 @@ export const koppelObject = (data: ContactmomentObject) => body: JSON.stringify(data), }).then(throwIfNotOk); -const nullIf404andThrowIfNotOk = (r: Response) => { - if (r.status === 404) return null; - throwIfNotOk(r); - return r; -}; +const nullForStatusCodes = + (...statusCodes: number[]) => + (r: Response) => { + if (statusCodes.includes(r.status)) return null; + throwIfNotOk(r); + return r; + }; export async function enrichContactverzoekObjectWithContactmoment( contactverzoekObject: any, ) { const url = contactverzoekObject.record.data.contactmoment; - const [contactmoment, details] = await Promise.all([ + const [contactmoment, details, objects] = await Promise.all([ fetchContactmomentByUrl(url), fetchDetailsByUrl(url), + fetchObjectsByContactmomentUrl(url), ]); return { contactverzoekObject, - contactmoment, + contactmoment: { + ...(contactmoment ?? {}), + objectcontactmomenten: + contactmoment?.objectcontactmomenten || objects.page, + }, details, }; } @@ -463,7 +470,7 @@ function fetchContactmomentByUrl(url: string) { return fetchLoggedIn( `${path}?${new URLSearchParams({ expand: "objectcontactmomenten" })}`, ) - .then(nullIf404andThrowIfNotOk) + .then(nullForStatusCodes(404, 403)) .then((r) => r?.json()); } @@ -471,6 +478,14 @@ function fetchDetailsByUrl(url: string) { return fetchLoggedIn( `/api/contactmomentdetails?${new URLSearchParams({ id: url })}`, ) - .then(nullIf404andThrowIfNotOk) + .then(nullForStatusCodes(404)) .then((r) => r?.json()); } + +function fetchObjectsByContactmomentUrl(url: string) { + return fetchLoggedIn( + `${objectcontactmomentenUrl}?${new URLSearchParams({ contactmoment: url })}`, + ) + .then((r) => r?.json()) + .then((x) => parsePagination(x, (o) => o as unknown)); +} From ab8d7411badf341ccced6656301ca6bf410a8a91 Mon Sep 17 00:00:00 2001 From: Felix Cornelissen Date: Tue, 12 Nov 2024 14:15:28 +0100 Subject: [PATCH 2/3] comment --- src/services/openklant1/service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/services/openklant1/service.ts b/src/services/openklant1/service.ts index 61469b746..10e40d4e6 100644 --- a/src/services/openklant1/service.ts +++ b/src/services/openklant1/service.ts @@ -456,6 +456,7 @@ export async function enrichContactverzoekObjectWithContactmoment( contactmoment: { ...(contactmoment ?? {}), objectcontactmomenten: + // extend lijkt niet te werken op enkel contactmoment endpoint contactmoment?.objectcontactmomenten || objects.page, }, details, From 3f331ebcf7fad7ef658119917ea38f900148cbc4 Mon Sep 17 00:00:00 2001 From: Felix Cornelissen Date: Wed, 13 Nov 2024 09:12:09 +0100 Subject: [PATCH 3/3] comments --- src/services/openklant1/service.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/services/openklant1/service.ts b/src/services/openklant1/service.ts index 10e40d4e6..849eff423 100644 --- a/src/services/openklant1/service.ts +++ b/src/services/openklant1/service.ts @@ -456,7 +456,8 @@ export async function enrichContactverzoekObjectWithContactmoment( contactmoment: { ...(contactmoment ?? {}), objectcontactmomenten: - // extend lijkt niet te werken op enkel contactmoment endpoint + // de esuite voegt de objectcontactmomenten wel toe aan een lijst met contacten, + // maar niet aan een enkel contactmoment. daarom halen we ze hier expliciet op contactmoment?.objectcontactmomenten || objects.page, }, details, @@ -468,11 +469,17 @@ function fetchContactmomentByUrl(url: string) { if (!path) { throw new Error(); } - return fetchLoggedIn( - `${path}?${new URLSearchParams({ expand: "objectcontactmomenten" })}`, - ) - .then(nullForStatusCodes(404, 403)) - .then((r) => r?.json()); + return ( + fetchLoggedIn( + `${path}?${new URLSearchParams({ expand: "objectcontactmomenten" })}`, + ) + // de esuite heeft een ingewikkelde autorisatiestructuur. + // als je niet geautoriseerd bent voor een specifiek contact, + // zie je deze netjes in het overzicht maar krijg je een 403 als je het specifieke contact ophaalt. + // we willen niet dat de hele lijst met contactverzoeken hier op klapt dus geven in dat scenario null terug. + .then(nullForStatusCodes(404, 403)) + .then((r) => r?.json()) + ); } function fetchDetailsByUrl(url: string) {