import { createCounter } from "@scandic-hotels/common/telemetry" import { router } from "../../.." import { notFoundError } from "../../../errors" import { GetCampaignOverviewPage } from "../../../graphql/Query/CampaignOverviewPage/CampaignOverviewPage.graphql" import { request } from "../../../graphql/request" import { contentStackUidWithServiceProcedure } from "../../../procedures" import { generateTag } from "../../../utils/generateTag" import { campaignOverviewPageSchema } from "./output" import type { GetCampaignOverviewPageData } from "../../../types/campaignOverviewPage" import type { TrackingPageData } from "../../types" export const campaignOverviewPageQueryRouter = router({ get: contentStackUidWithServiceProcedure.query(async ({ ctx }) => { const { lang, uid } = ctx const cacheKey = generateTag(lang, uid) const getCampaignOverviewPageCounter = createCounter( "trpc.contentstack.campaignOverviewPage.get" ) const metricsGetCampaignOverviewPage = getCampaignOverviewPageCounter.init({ lang, uid, }) metricsGetCampaignOverviewPage.start() const variables = { locale: lang, uid } const response = await request( GetCampaignOverviewPage, variables, { key: `${cacheKey}:campaignOverviewPage`, ttl: "max", } ) if (!response.data) { metricsGetCampaignOverviewPage.noDataError() throw notFoundError({ message: "GetCampaignOverviewPage returned no data", errorDetails: variables, }) } 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, } }), })