Files
web/apps/scandic-web/server/routers/contentstack/partner/query.ts
Joakim Jäderberg fa63b20ed0 Merged in feature/redis (pull request #1478)
Distributed cache

* cache deleteKey now uses an options object instead of a lonely argument variable fuzzy

* merge

* remove debug logs and cleanup

* cleanup

* add fault handling

* add fault handling

* add pid when logging redis client creation

* add identifier when logging redis client creation

* cleanup

* feat: add redis-api as it's own app

* feature: use http wrapper for redis

* feat: add the possibility to fallback to unstable_cache

* Add error handling if redis cache is unresponsive

* add logging for unstable_cache

* merge

* don't cache errors

* fix: metadatabase on branchdeploys

* Handle when /en/destinations throws
add ErrorBoundary

* Add sentry-logging when ErrorBoundary catches exception

* Fix error handling for distributed cache

* cleanup code

* Added Application Insights back

* Update generateApiKeys script and remove duplicate

* Merge branch 'feature/redis' of bitbucket.org:scandic-swap/web into feature/redis

* merge


Approved-by: Linus Flood
2025-03-14 07:54:21 +00:00

85 lines
2.4 KiB
TypeScript

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<SasTierComparisonResponse>(
GetAllSasTierComparison,
{ lang: ctx.lang },
{
key: tag,
ttl: "max",
}
)
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)
}),
})