Chore/refactor hotel trpc routes * chore(SW-3519): refactor trpc hotel routers * chore(SW-3519): refactor trpc hotel routers * refactor * merge * Merge branch 'master' of bitbucket.org:scandic-swap/web into chore/refactor-hotel-trpc-routes Approved-by: Linus Flood
64 lines
1.6 KiB
TypeScript
64 lines
1.6 KiB
TypeScript
import { getCacheClient } from "@scandic-hotels/common/dataCache"
|
|
import { createCounter } from "@scandic-hotels/common/telemetry"
|
|
|
|
import { env } from "../../../../env/server"
|
|
import * as api from "../../../api"
|
|
import { getHotelIdsSchema } from "../output"
|
|
|
|
export async function getHotelIdsByCityId({
|
|
cityId,
|
|
serviceToken,
|
|
}: {
|
|
cityId: string
|
|
serviceToken: string
|
|
}) {
|
|
const getHotelIdsByCityIdCounter = createCounter(
|
|
"hotel",
|
|
"getHotelIdsByCityId"
|
|
)
|
|
const metricsGetHotelIdsByCityId = getHotelIdsByCityIdCounter.init({
|
|
cityId,
|
|
})
|
|
|
|
metricsGetHotelIdsByCityId.start()
|
|
|
|
const cacheClient = await getCacheClient()
|
|
const result = await cacheClient.cacheOrGet(
|
|
`${cityId}:hotelsByCityId`,
|
|
async () => {
|
|
const searchParams = new URLSearchParams({
|
|
city: cityId,
|
|
})
|
|
|
|
const apiResponse = await api.get(
|
|
api.endpoints.v1.Hotel.hotels,
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${serviceToken}`,
|
|
},
|
|
},
|
|
searchParams
|
|
)
|
|
|
|
if (!apiResponse.ok) {
|
|
await metricsGetHotelIdsByCityId.httpError(apiResponse)
|
|
throw new Error("Unable to fetch hotelIds by cityId")
|
|
}
|
|
|
|
const apiJson = await apiResponse.json()
|
|
const validatedHotelIds = getHotelIdsSchema.safeParse(apiJson)
|
|
if (!validatedHotelIds.success) {
|
|
metricsGetHotelIdsByCityId.validationError(validatedHotelIds.error)
|
|
throw new Error("Unable to parse data for hotelIds by cityId")
|
|
}
|
|
|
|
return validatedHotelIds.data
|
|
},
|
|
env.CACHE_TIME_HOTELS
|
|
)
|
|
|
|
metricsGetHotelIdsByCityId.success()
|
|
|
|
return result
|
|
}
|