From 864f3cdaf25eaab15f96c9b76b3b30686e2f892d Mon Sep 17 00:00:00 2001 From: Fredrik Thorsson Date: Wed, 28 Aug 2024 16:39:59 +0200 Subject: [PATCH] feat(SW-176): rebase --- server/routers/hotels/query.ts | 91 ++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/server/routers/hotels/query.ts b/server/routers/hotels/query.ts index 90ae3d58e..55fb3e9ba 100644 --- a/server/routers/hotels/query.ts +++ b/server/routers/hotels/query.ts @@ -218,6 +218,97 @@ export const hotelQueryRouter = router({ roomCategories, } }), + availability: serviceProcedure + .input(getAvailabilityInputSchema) + .query(async ({ input, ctx }) => { + const { cityId, roomStayStartDate, roomStayEndDate, adults } = input + const params: Record = { + roomStayStartDate, + roomStayEndDate, + adults, + } + availabilityCounter.add(1, { + cityId, + roomStayStartDate, + roomStayEndDate, + adults, + }) + console.info( + "api.hotels.availability start", + JSON.stringify({ query: { cityId, params } }) + ) + const apiResponse = await api.get( + `${api.endpoints.v0.availability}/${cityId}`, + { + cache: "no-store", + headers: { + Authorization: `Bearer ${ctx.serviceToken}`, + }, + }, + params + ) + if (!apiResponse.ok) { + const text = await apiResponse.text() + availabilityFailCounter.add(1, { + cityId, + roomStayStartDate, + roomStayEndDate, + adults, + error_type: "http_error", + error: JSON.stringify({ + status: apiResponse.status, + statusText: apiResponse.statusText, + text, + }), + }) + console.error( + "api.hotels.availability error", + JSON.stringify({ + query: { cityId, params }, + error: { + status: apiResponse.status, + statusText: apiResponse.statusText, + text, + }, + }) + ) + return null + } + const apiJson = await apiResponse.json() + const validateAvailabilityData = getAvailabilitySchema.safeParse(apiJson) + if (!validateAvailabilityData.success) { + availabilityFailCounter.add(1, { + cityId, + roomStayStartDate, + roomStayEndDate, + adults, + error_type: "validation_error", + error: JSON.stringify(validateAvailabilityData.error), + }) + console.error( + "api.hotels.availability validation error", + JSON.stringify({ + query: { cityId, params }, + error: validateAvailabilityData.error, + }) + ) + throw badRequestError() + } + availabilitySuccessCounter.add(1, { + cityId, + roomStayStartDate, + roomStayEndDate, + adults, + }) + console.info( + JSON.stringify({ + query: { cityId, params: params }, + }) + ) + return { + availability: validateAvailabilityData.data, + } + }), rates: router({ get: publicProcedure .input(getRatesInputSchema)