import { createCounter } from "@scandic-hotels/common/telemetry" import { router } from "../../.." import { notFound } from "../../../errors" import { GetCampaignOverviewPage, GetCampaignOverviewPageRefs, } from "../../../graphql/Query/CampaignOverviewPage/CampaignOverviewPage.graphql" import { request } from "../../../graphql/request" import { contentStackUidWithServiceProcedure } from "../../../procedures" import { generateRefsResponseTag } from "../../../utils/generateTag" import { campaignOverviewPageRefsSchema, campaignOverviewPageSchema, } from "./output" import { generatePageTags } from "./utils" import type { GetCampaignOverviewPageData, GetCampaignOverviewPageRefsData, } from "../../../types/campaignOverviewPage" import type { TrackingPageData } from "../../types" export const campaignOverviewPageQueryRouter = router({ get: contentStackUidWithServiceProcedure.query(async ({ ctx }) => { const { lang, uid } = ctx const getCampaignOverviewPageRefsCounter = createCounter( "trpc.contentstack.campaignOverviewPage.get.refs" ) const metricsGetCampaignOverviewPageRefs = getCampaignOverviewPageRefsCounter.init({ lang, uid, }) metricsGetCampaignOverviewPageRefs.start() const refsResponse = await request( GetCampaignOverviewPageRefs, { locale: lang, uid }, { key: generateRefsResponseTag(lang, uid), ttl: "max", } ) if (!refsResponse.data) { const notFoundError = notFound(refsResponse) metricsGetCampaignOverviewPageRefs.noDataError() throw notFoundError } const validatedRefsData = campaignOverviewPageRefsSchema.safeParse( refsResponse.data ) if (!validatedRefsData.success) { metricsGetCampaignOverviewPageRefs.validationError( validatedRefsData.error ) return null } metricsGetCampaignOverviewPageRefs.success() const tags = generatePageTags(validatedRefsData.data, lang) const getCampaignOverviewPageCounter = createCounter( "trpc.contentstack.campaignOverviewPage.get" ) const metricsGetCampaignOverviewPage = getCampaignOverviewPageCounter.init({ lang, uid, }) metricsGetCampaignOverviewPage.start() const response = await request( GetCampaignOverviewPage, { locale: lang, uid, }, { key: tags, ttl: "max", } ) if (!response.data) { const notFoundError = notFound(response) metricsGetCampaignOverviewPage.noDataError() throw notFoundError } const validatedResponse = campaignOverviewPageSchema.safeParse( response.data ) if (!validatedResponse.success) { metricsGetCampaignOverviewPage.validationError(validatedResponse.error) return null } const { campaign_overview_page, trackingProps } = validatedResponse.data metricsGetCampaignOverviewPage.success() const system = campaign_overview_page.system const pageName = trackingProps.url const tracking: TrackingPageData = { pageId: system.uid, domainLanguage: system.locale, publishDate: system.updated_at, createDate: system.created_at, channel: "campaign", pageType: "campaignoverviewpage", pageName, siteSections: pageName, siteVersion: "new-web", } return { campaign_overview_page, tracking, } }), })