From d85e7245f4460ec0900d8a475d1a94aae72d3944 Mon Sep 17 00:00:00 2001 From: celineung Date: Wed, 12 Feb 2025 10:50:34 +0100 Subject: [PATCH] add cache to lbb get company by siret --- .../la-bonne-boite/HttpLaBonneBoiteGateway.ts | 78 +++++++++++-------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts index c42b61cfe8..c2f1b06f46 100644 --- a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts +++ b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts @@ -132,40 +132,54 @@ export class HttpLaBonneBoiteGateway implements LaBonneBoiteGateway { siret: SiretDto, romeDto: RomeDto, ): Promise { - return this.#limiter - .schedule(async () => - this.httpClient.getCompany({ - headers: { - authorization: await this.#makeAutorization(), - }, - queryParams: { + const cachedGetLbbResult = this.withCache({ + overrideCacheDurationInHours: 24 * 3, + logParams: { + partner: "laBonneBoite", + route: this.lbbRoute.getCompany, + }, + getCacheKey: (siret) => `lbb_${siret}`, + cb: async (siret): Promise => { + return this.httpClient + .getCompany({ + headers: { + authorization: await this.#makeAutorization(), + }, + queryParams: { + siret, + }, + }) + .then((response) => { + if (response.status !== 200) + throw new Error(JSON.stringify(response)); + return response.body?.items ?? []; + }); + }, + }); + return this.#limiter.schedule(async () => + cachedGetLbbResult(siret) + .then((result) => { + const item = result + .map( + (props: LaBonneBoiteApiResultV2Props) => + new LaBonneBoiteCompanyDto(props), + ) + .filter((result) => result.isCompanyRelevant()) + .map((result) => result.toSearchResult(romeDto)) + .at(0); + + return item ?? null; + }) + .catch((error) => { + logger.error({ + error: castError(error), + message: "fetchCompanyBySiret_error", siret, - }, + romeLabel: romeDto.romeLabel, + }); + throw error; }), - ) - .then((response) => { - if (response.status !== 200) throw new Error(JSON.stringify(response)); - - const item = response.body?.items - ?.map( - (props: LaBonneBoiteApiResultV2Props) => - new LaBonneBoiteCompanyDto(props), - ) - .filter((result) => result.isCompanyRelevant()) - .map((result) => result.toSearchResult(romeDto)) - .at(0); - - return item ?? null; - }) - .catch((error) => { - logger.error({ - error: castError(error), - message: "fetchCompanyBySiret_error", - siret, - romeLabel: romeDto.romeLabel, - }); - throw error; - }); + ); } async #makeAutorization(): Promise {