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
58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import { getCacheClient } from "@scandic-hotels/common/dataCache"
|
|
import { createLogger } from "@scandic-hotels/common/logger/createLogger"
|
|
|
|
import * as api from "../../../api"
|
|
import { toApiLang } from "../../../utils"
|
|
import { countriesSchema } from "../output"
|
|
|
|
import type { Lang } from "@scandic-hotels/common/constants/language"
|
|
|
|
const logger = createLogger("getCountries")
|
|
const locationsAffix = "locations"
|
|
export async function getCountries({
|
|
lang,
|
|
serviceToken,
|
|
warmup = false,
|
|
}: {
|
|
lang: Lang
|
|
serviceToken: string
|
|
warmup?: boolean
|
|
}) {
|
|
const cacheClient = await getCacheClient()
|
|
return await cacheClient.cacheOrGet(
|
|
`${lang}:${locationsAffix}:countries`,
|
|
async () => {
|
|
const params = new URLSearchParams({
|
|
language: toApiLang(lang),
|
|
})
|
|
|
|
const countryResponse = await api.get(
|
|
api.endpoints.v1.Hotel.countries,
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${serviceToken}`,
|
|
},
|
|
},
|
|
params
|
|
)
|
|
|
|
if (!countryResponse.ok) {
|
|
throw new Error("Unable to fetch countries")
|
|
}
|
|
|
|
const countriesJson = await countryResponse.json()
|
|
const countries = countriesSchema.safeParse(countriesJson)
|
|
if (!countries.success) {
|
|
logger.error(`Validation for countries failed`, countries.error)
|
|
return null
|
|
}
|
|
|
|
return countries.data
|
|
},
|
|
"1d",
|
|
{
|
|
cacheStrategy: warmup ? "fetch-then-cache" : "cache-first",
|
|
}
|
|
)
|
|
}
|