import { Lang } from "@/constants/languages" import { GetContentPage } from "@/lib/graphql/Query/ContentPage/ContentPage.graphql" import { request } from "@/lib/graphql/request" import { contentstackExtendedProcedureUID, router } from "@/server/trpc" import { contentPageSchema } from "./output" import { fetchContentPageRefs, generatePageTags, getContentPageCounter, validateContentPageRefs, } from "./utils" import { TrackingChannelEnum, type TrackingSDKPageData, } from "@/types/components/tracking" import type { GetContentPageSchema } from "@/types/trpc/routers/contentstack/contentPage" export const contentPageQueryRouter = router({ get: contentstackExtendedProcedureUID.query(async ({ ctx }) => { const { lang, uid } = ctx const contentPageRefsData = await fetchContentPageRefs(lang, uid) const contentPageRefs = validateContentPageRefs( contentPageRefsData, lang, uid ) if (!contentPageRefs) { return null } const tags = generatePageTags(contentPageRefs, lang) getContentPageCounter.add(1, { lang, uid }) console.info( "contentstack.contentPage start", JSON.stringify({ query: { lang, uid }, }) ) const response = await request( GetContentPage, { locale: lang, uid }, { cache: "force-cache", next: { tags, }, } ) const contentPage = contentPageSchema.safeParse(response.data) if (!contentPage.success) { console.error( `Failed to validate Contentpage Data - (lang: ${lang}, uid: ${uid})` ) console.error(contentPage.error?.format()) return null } const tracking: TrackingSDKPageData = { pageId: contentPage.data.content_page.system.uid, domainLanguage: contentPage.data.content_page.system.locale as Lang, publishedDate: contentPage.data.content_page.system.updated_at, createdDate: contentPage.data.content_page.system.created_at, channel: TrackingChannelEnum["static-content-page"], pageType: "staticcontentpage", pageName: contentPage.data.content_page.page_settings.tracking_page_name, siteSections: contentPage.data.content_page.page_settings.tracking_page_name, // Always the same as pageName for this page } return { contentPage: contentPage.data.content_page, tracking, } }), })