feat(SW-251): set up filter route

This commit is contained in:
Fredrik Thorsson
2024-09-04 13:44:16 +02:00
parent 21d8a5835a
commit 3f6e2ca06e
5 changed files with 129 additions and 29 deletions

View File

@@ -33,8 +33,8 @@ import {
} from "./input"
import {
getAvailabilitySchema,
getFiltersSchema,
getHotelDataSchema,
getHotelFilterSchema,
getRatesSchema,
roomSchema,
} from "./output"
@@ -57,6 +57,10 @@ const availabilityFailCounter = meter.createCounter(
"trpc.hotel.availability-fail"
)
const filterCounter = meter.createCounter("trcp.hotel.filter")
const filterSuccessCounter = meter.createCounter("trcp.hotel.filter-success")
const filterFailCounter = meter.createCounter("trcp.hotel.filter-fail")
async function getContentstackData(
locale: string,
uid: string | null | undefined
@@ -420,31 +424,97 @@ export const hotelQueryRouter = router({
}),
}),
filters: router({
get: publicProcedure
get: serviceProcedure
.input(getFiltersInputSchema)
.query(async ({ input, ctx }) => {
console.info("api.hotels.filters start", JSON.stringify({}))
const { language, country, city } = input
const params: Record<string, string> = {
language,
country,
city,
}
if (!tempFilterData) {
filterCounter.add(1, {
language,
country,
city,
})
console.info(
"api.hotels.filters start",
JSON.stringify({
query: { params },
})
)
const apiResponse = await api.get(
api.endpoints.v1.hotels,
{
headers: {
Authorization: `Bearer ${ctx.serviceToken}`,
},
},
params
)
if (!apiResponse.ok) {
const text = await apiResponse.text()
filterFailCounter.add(1, {
language,
country,
city,
error_type: "http_error",
error: JSON.stringify({
status: apiResponse.status,
statusText: apiResponse.statusText,
text,
}),
})
console.error(
"api.hotels.filters error",
JSON.stringify({ error: null })
JSON.stringify({
query: {
params,
},
error: {
status: apiResponse.status,
statusText: apiResponse.statusText,
text,
},
})
)
//Can't return null here since consuming component does not handle null yet
// return null
return null
}
const validateFilterData = getFiltersSchema.safeParse(tempFilterData)
const apiJson = await apiResponse.json()
const validateFilterData = getHotelFilterSchema.safeParse(apiJson)
if (!validateFilterData.success) {
filterFailCounter.add(1, {
language,
country,
city,
error_type: "validation_error",
error: JSON.stringify(validateFilterData.error),
})
console.error(
"api.hotels.filters validation error",
JSON.stringify({
query: { params },
error: validateFilterData.error,
})
)
throw badRequestError()
}
console.info("api.hotels.rates success", JSON.stringify({}))
filterSuccessCounter.add(1, {
language,
country,
city,
})
console.info(
"api.hotels.fuilters success",
JSON.stringify({ query: { params: params } })
)
return validateFilterData.data
}),
}),