import * as Sentry from "@sentry/nextjs" import { contentstackBaseProcedure } from "@scandic-hotels/trpc/procedures" import { router } from "../../.." import { PageContentTypeEnum } from "../../../enums/contentType" import { GetAccountPageSettings, GetCampaignOverviewPageSettings, GetCampaignPageSettings, GetCollectionPageSettings, GetContentPageSettings, GetCurrentBlocksPageSettings, GetDestinationCityPageSettings, GetDestinationCountryPageSettings, GetDestinationOverviewPageSettings, GetHotelPageSettings, GetLoyaltyPageSettings, GetStartPageSettings, } from "../../../graphql/Query/PageSettings.graphql" import { request } from "../../../graphql/request" import { langInput } from "../../../utils" import { generateTag } from "../../../utils/generateTag" import { DEFAULT_GET_PAGE_SETTINGS, type GetPageSettingsSchema, getPageSettingsSchema, } from "./output" import { affix } from "./utils" export const pageSettingsQueryRouter = router({ get: contentstackBaseProcedure .input(langInput) .query(async ({ input, ctx }): Promise => { const { contentType, uid } = ctx const lang = input.lang ?? ctx.lang // This condition is to handle 404 page case and booking flow if (!contentType || !uid) { return DEFAULT_GET_PAGE_SETTINGS } const getPageSettingsQuery = graphqlQueriesForContentType[contentType as PageContentTypeEnum] if (!getPageSettingsQuery) { Sentry.captureMessage( `GetPageSettings: No proper Content type defined for '${contentType}'` ) return DEFAULT_GET_PAGE_SETTINGS } const response = await request( getPageSettingsQuery, { uid: uid, locale: lang, }, { key: generateTag(lang, uid, affix), ttl: "max", } ) try { const result = getPageSettingsSchema.parse(response.data) return result } catch (error) { Sentry.captureException(error, { extra: { uid, contentType } }) return DEFAULT_GET_PAGE_SETTINGS } }), }) const graphqlQueriesForContentType: Record = { [PageContentTypeEnum.accountPage]: GetAccountPageSettings, [PageContentTypeEnum.campaignOverviewPage]: GetCampaignOverviewPageSettings, [PageContentTypeEnum.campaignPage]: GetCampaignPageSettings, [PageContentTypeEnum.collectionPage]: GetCollectionPageSettings, [PageContentTypeEnum.contentPage]: GetContentPageSettings, [PageContentTypeEnum.currentBlocksPage]: GetCurrentBlocksPageSettings, [PageContentTypeEnum.destinationCityPage]: GetDestinationCityPageSettings, [PageContentTypeEnum.destinationCountryPage]: GetDestinationCountryPageSettings, [PageContentTypeEnum.destinationOverviewPage]: GetDestinationOverviewPageSettings, [PageContentTypeEnum.hotelPage]: GetHotelPageSettings, [PageContentTypeEnum.loyaltyPage]: GetLoyaltyPageSettings, [PageContentTypeEnum.startPage]: GetStartPageSettings, }