Skip to content

Commit

Permalink
Merge pull request #950 from Klantinteractie-Servicesysteem/bevinding…
Browse files Browse the repository at this point in the history
…-pc-317

Bevinding pc-317
  • Loading branch information
mstokericatt authored Nov 13, 2024
2 parents bac02e0 + 3f331eb commit b133830
Showing 1 changed file with 36 additions and 13 deletions.
49 changes: 36 additions & 13 deletions src/services/openklant1/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -434,23 +434,32 @@ 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:
// 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,
};
}
Expand All @@ -460,17 +469,31 @@ function fetchContactmomentByUrl(url: string) {
if (!path) {
throw new Error();
}
return fetchLoggedIn(
`${path}?${new URLSearchParams({ expand: "objectcontactmomenten" })}`,
)
.then(nullIf404andThrowIfNotOk)
.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) {
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));
}

0 comments on commit b133830

Please sign in to comment.