import { cache } from "react" import { createCounter } from "@scandic-hotels/common/telemetry" import { router } from "../../.." import { notFound } from "../../../errors" import { GetAllSasTierComparison } from "../../../graphql/Query/SASTierComparison.graphql" import { request } from "../../../graphql/request" import { contentstackBaseProcedure } from "../../../procedures" import { validateSasTierComparisonSchema } from "./output" import type { Lang } from "@scandic-hotels/common/constants/language" import type { z } from "zod" type SasTierComparisonResponse = z.input export const getSasTierComparison = cache(async (lang: Lang) => { const getSasTierComparisonCounter = createCounter( "trpc.contentstack.partner.getSasTierComparison" ) const metricsGetSasTierComparison = getSasTierComparisonCounter.init({ lang, }) metricsGetSasTierComparison.start() const tag = `${lang}:sas_tier_comparison` const sasTierComparisonConfigResponse = await request( GetAllSasTierComparison, { lang }, { key: tag, ttl: "max", } ) if (!sasTierComparisonConfigResponse.data) { const notFoundError = notFound(sasTierComparisonConfigResponse) metricsGetSasTierComparison.noDataError() throw notFoundError } const validatedSasTierComparison = validateSasTierComparisonSchema.safeParse( sasTierComparisonConfigResponse.data ) if (!validatedSasTierComparison.success) { metricsGetSasTierComparison.validationError( validatedSasTierComparison.error ) return null } metricsGetSasTierComparison.success() return validatedSasTierComparison.data }) export const partnerQueryRouter = router({ getSasTierComparison: contentstackBaseProcedure.query(async function ({ ctx, }) { return getSasTierComparison(ctx.lang) }), })