SW-3572 API route for listing hotels per city or country * wip hotel data endpoint * Correct route params type * wip * skip static paths call * timeout when getting destinations take too long * call noStore when we get a timeout * add cache-control headers * . * . * . * wip * wip * wip * wip * add route for getting hotels per country * include city when listing by country * fix distance SI unit * fix sorting * Merge branch 'master' of bitbucket.org:scandic-swap/web into feature/SW-3572-hotel-data-endpoint * packages/tracking passWithNoTests * revalidate must be static value * remove oxc reference * cleanup * cleanup hotel api route * feat(SW-3572): cleanup error handling Approved-by: Anton Gunnarsson
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { z } from "zod"
|
|
|
|
import { Lang } from "@scandic-hotels/common/constants/language"
|
|
import { createCounter } from "@scandic-hotels/common/telemetry"
|
|
|
|
import { publicProcedure } from "../../../procedures"
|
|
import { getCityPageUrls } from "../../contentstack/destinationCityPage/utils"
|
|
import { getHotelPageUrls } from "../../contentstack/hotelPage/utils"
|
|
|
|
const getLocationsUrlsInput = z.object({
|
|
lang: z.nativeEnum(Lang),
|
|
})
|
|
|
|
export const urls = publicProcedure
|
|
.input(getLocationsUrlsInput)
|
|
.query(async ({ input }) => {
|
|
const { lang } = input
|
|
|
|
const locationsUrlsCounter = createCounter("trpc.hotel.locations", "urls")
|
|
const metricsLocationsUrls = locationsUrlsCounter.init({
|
|
lang,
|
|
})
|
|
|
|
metricsLocationsUrls.start()
|
|
|
|
const [hotelPageUrlsResult, cityPageUrlsResult] = await Promise.allSettled([
|
|
getHotelPageUrls(lang),
|
|
getCityPageUrls(lang),
|
|
])
|
|
|
|
if (
|
|
hotelPageUrlsResult.status === "rejected" ||
|
|
cityPageUrlsResult.status === "rejected"
|
|
) {
|
|
metricsLocationsUrls.dataError(`Failed to get data for page URLs`, {
|
|
hotelPageUrlsResult,
|
|
cityPageUrlsResult,
|
|
})
|
|
|
|
return null
|
|
}
|
|
|
|
metricsLocationsUrls.success()
|
|
|
|
return {
|
|
hotels: hotelPageUrlsResult.value,
|
|
cities: cityPageUrlsResult.value,
|
|
}
|
|
})
|