Files
web/packages/trpc/lib/routers/contentstack/campaignPage/utils.ts
Linus Flood 5fc93472f4 Merged in feat/rework-contentstack (pull request #3493)
Feat(SW-3708): refactor contentstack fetching (removing all refs) and cache invalidation

* Remove all REFS

* Revalidate correct language

* PR fixes

* PR fixes

* Throw when errors from contentstack api


Approved-by: Joakim Jäderberg
2026-01-27 12:38:36 +00:00

99 lines
2.4 KiB
TypeScript

import { dt } from "@scandic-hotels/common/dt"
import { createCounter } from "@scandic-hotels/common/telemetry"
import { GetCampaignPagesByHotelUid } from "../../../graphql/Query/CampaignPage/CampaignPagesByHotelUid.graphql"
import { request } from "../../../graphql/request"
import { generateTag } from "../../../utils/generateTag"
import { campaignPagesByHotelUidSchema } from "./output"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type {
CarouselCardsBlock,
GetCampaignPagesByHotelUidData,
} from "../../../types/campaignPage"
export function getCarouselCardsBlockWithBookingCodeLinks(
block: CarouselCardsBlock,
bookingCode: string | null
): CarouselCardsBlock {
if (!bookingCode) {
return block
}
const { link, cards, ...carousel_cards } = block.carousel_cards
return {
...block,
carousel_cards: {
...carousel_cards,
link: link
? {
...link,
href: `${link.href}?bookingCode=${bookingCode}`,
}
: undefined,
cards: cards.map(({ link, ...card }) => ({
...card,
link: link
? {
...link,
href: `${link.href}?bookingCode=${bookingCode}`,
}
: undefined,
})),
},
}
}
export async function getCampaignPagesByHotelPageUid(
hotelPageUid: string,
lang: Lang
) {
const today = dt().format("YYYY-MM-DD")
const getCampaignPagesByHotelUidCounter = createCounter(
"trpc.contentstack.campaignPage.byHotelUid.get"
)
const metricsGetCampaignPagesByHotelUid =
getCampaignPagesByHotelUidCounter.init({
lang,
hotelPageUid,
today,
})
metricsGetCampaignPagesByHotelUid.start()
const variables = {
locale: lang,
hotelPageUid,
today,
}
const response = await request<GetCampaignPagesByHotelUidData>(
GetCampaignPagesByHotelUid,
variables,
{
key: generateTag(lang, `${hotelPageUid}-${today}`),
ttl: "1d",
}
)
if (!response.data) {
metricsGetCampaignPagesByHotelUid.noDataError()
return null
}
const validatedResponse = campaignPagesByHotelUidSchema.safeParse(
response.data
)
if (!validatedResponse.success) {
metricsGetCampaignPagesByHotelUid.validationError(validatedResponse.error)
return null
}
metricsGetCampaignPagesByHotelUid.success()
return validatedResponse.data
}