Feat(SW-3708): refactor contentstack fetching (removing all refs) and cache invalidation * Remove all REFS * Revalidate correct language * PR fixes * PR fixes * Throw when errors from contentstack api Approved-by: Joakim Jäderberg
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import { createCounter } from "@scandic-hotels/common/telemetry"
|
|
|
|
import { router } from "../../.."
|
|
import { notFoundError } from "../../../errors"
|
|
import { GetUsePointsModal } from "../../../graphql/Query/UsePointsModal.graphql"
|
|
import { request } from "../../../graphql/request"
|
|
import { contentstackBaseProcedure } from "../../../procedures"
|
|
import { generateTag } from "../../../utils/generateTag"
|
|
import { type UsePointsModalData, usePointsModalSchema } from "./output"
|
|
|
|
export const usePointsModalQueryRouter = router({
|
|
get: contentstackBaseProcedure.query(async ({ ctx }) => {
|
|
const { lang, uid } = ctx
|
|
|
|
const getCounter = createCounter("trpc.contentstack.usePointsModal.get")
|
|
|
|
const metrics = getCounter.init({
|
|
lang,
|
|
uid,
|
|
})
|
|
metrics.start()
|
|
|
|
const variables = { locale: lang }
|
|
|
|
const response = await request<UsePointsModalData>(
|
|
GetUsePointsModal,
|
|
variables,
|
|
{
|
|
key: generateTag(lang, "usepointsmodal"),
|
|
ttl: "max",
|
|
}
|
|
)
|
|
|
|
if (!response.data) {
|
|
metrics.noDataError()
|
|
throw notFoundError({
|
|
message: "GetUsePointsModal returned no data",
|
|
errorDetails: variables,
|
|
})
|
|
}
|
|
|
|
const validatedResponse = usePointsModalSchema.safeParse(response.data)
|
|
|
|
if (!validatedResponse.success) {
|
|
metrics.validationError(validatedResponse.error)
|
|
return null
|
|
}
|
|
|
|
metrics.success()
|
|
return validatedResponse.data
|
|
}),
|
|
})
|