feat(SW-176): refactor

This commit is contained in:
Fredrik Thorsson
2024-08-28 17:00:51 +02:00
parent 864f3cdaf2
commit d11554168f
2 changed files with 78 additions and 75 deletions

View File

@@ -28,7 +28,7 @@ export default async function SelectHotelPage({
hotelId: "879", hotelId: "879",
}) })
const availability = await serverClient().hotel.availability({ const availability = await serverClient().hotel.availability.get({
cityId: "8ec4bba3-1c38-4606-82d1-bbe3f6738e54", cityId: "8ec4bba3-1c38-4606-82d1-bbe3f6738e54",
roomStayStartDate: "2024-11-01", roomStayStartDate: "2024-11-01",
roomStayEndDate: "2024-11-02", roomStayEndDate: "2024-11-02",

View File

@@ -218,97 +218,100 @@ export const hotelQueryRouter = router({
roomCategories, roomCategories,
} }
}), }),
availability: serviceProcedure availability: router({
.input(getAvailabilityInputSchema) get: serviceProcedure
.query(async ({ input, ctx }) => { .input(getAvailabilityInputSchema)
const { cityId, roomStayStartDate, roomStayEndDate, adults } = input .query(async ({ input, ctx }) => {
const params: Record<string, string | number> = { const { cityId, roomStayStartDate, roomStayEndDate, adults } = input
roomStayStartDate, const params: Record<string, string | number> = {
roomStayEndDate, roomStayStartDate,
adults, roomStayEndDate,
} adults,
availabilityCounter.add(1, { }
cityId, availabilityCounter.add(1, {
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, cityId,
roomStayStartDate, roomStayStartDate,
roomStayEndDate, roomStayEndDate,
adults, adults,
error_type: "http_error",
error: JSON.stringify({
status: apiResponse.status,
statusText: apiResponse.statusText,
text,
}),
}) })
console.error( console.info(
"api.hotels.availability error", "api.hotels.availability start",
JSON.stringify({ JSON.stringify({ query: { cityId, params } })
query: { cityId, params }, )
error: { 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, status: apiResponse.status,
statusText: apiResponse.statusText, statusText: apiResponse.statusText,
text, text,
}, }),
}) })
) console.error(
return null "api.hotels.availability error",
} JSON.stringify({
const apiJson = await apiResponse.json() query: { cityId, params },
const validateAvailabilityData = getAvailabilitySchema.safeParse(apiJson) error: {
if (!validateAvailabilityData.success) { status: apiResponse.status,
availabilityFailCounter.add(1, { 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, cityId,
roomStayStartDate, roomStayStartDate,
roomStayEndDate, roomStayEndDate,
adults, adults,
error_type: "validation_error",
error: JSON.stringify(validateAvailabilityData.error),
}) })
console.error( console.info(
"api.hotels.availability validation error",
JSON.stringify({ JSON.stringify({
query: { cityId, params }, query: { cityId, params: params },
error: validateAvailabilityData.error,
}) })
) )
throw badRequestError() return {
} availability: validateAvailabilityData.data,
availabilitySuccessCounter.add(1, { }
cityId, }),
roomStayStartDate, }),
roomStayEndDate,
adults,
})
console.info(
JSON.stringify({
query: { cityId, params: params },
})
)
return {
availability: validateAvailabilityData.data,
}
}),
rates: router({ rates: router({
get: publicProcedure get: publicProcedure
.input(getRatesInputSchema) .input(getRatesInputSchema)