import { metrics } from "@opentelemetry/api" import { cache } from "react" import { GetAllSasTierComparison } from "@/lib/graphql/Query/SASTierComparison.graphql" import { request } from "@/lib/graphql/request" import { notFound } from "@/server/errors/trpc" import { contentstackBaseProcedure, router } from "@/server/trpc" import { validateSasTierComparisonSchema } from "./output" import type { SasTierComparisonResponse } from "@/types/trpc/routers/contentstack/partner" import type { Context } from "@/server/context" const meter = metrics.getMeter("trpc.partner") const getSasTierComparisonCounter = meter.createCounter( "trpc.contentstack.partner.getSasTierComparison" ) const getSasTierComparisonSuccessCounter = meter.createCounter( "trpc.contentstack.partner.getSasTierComparison-success" ) const getSasTierComparisonFailCounter = meter.createCounter( "trpc.contentstack.partner.getSasTierComparison-fail" ) export const getSasTierComparison = cache(async (ctx: Context) => { getSasTierComparisonCounter.add(1) const tag = `${ctx.lang}:sas_tier_comparison` const sasTierComparisonConfigResponse = await request( GetAllSasTierComparison, { lang: ctx.lang }, { next: { tags: [tag], }, cache: "force-cache", } ) if (!sasTierComparisonConfigResponse.data) { getSasTierComparisonFailCounter.add(1) const notFoundError = notFound(sasTierComparisonConfigResponse) console.error( "contentstack.sas not found error", JSON.stringify({ query: { lang: ctx.lang, }, error: { code: notFoundError.code }, }) ) throw notFoundError } const validatedSasTierComparison = validateSasTierComparisonSchema.safeParse( sasTierComparisonConfigResponse.data ) if (!validatedSasTierComparison.success) { getSasTierComparisonFailCounter.add(1) console.error(validatedSasTierComparison.error) console.error( "contentstack.sas validation error", JSON.stringify({ query: { lang: ctx.lang, }, error: validatedSasTierComparison.error, }) ) return null } getSasTierComparisonSuccessCounter.add(1) return validatedSasTierComparison.data }) export const partnerQueryRouter = router({ getSasTierComparison: contentstackBaseProcedure.query(async function ({ ctx, }) { return getSasTierComparison(ctx) }), })