Merged in feat/rework-contentstack (pull request #3493)

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
This commit is contained in:
Linus Flood
2026-01-27 12:38:36 +00:00
parent a5e214f783
commit 5fc93472f4
193 changed files with 489 additions and 9018 deletions
@@ -3,27 +3,14 @@ import { createCounter } from "@scandic-hotels/common/telemetry"
import * as api from "../../../api"
import { notFoundError } from "../../../errors"
import {
GetRewards as GetRewards,
GetRewardsRef as GetRewardsRef,
} from "../../../graphql/Query/RewardsWithRedeem.graphql"
import { GetRewards } from "../../../graphql/Query/RewardsWithRedeem.graphql"
import { request } from "../../../graphql/request"
import {
generateLoyaltyConfigTag,
generateRefsResponseTag,
} from "../../../utils/generateTag"
import {
rewardRefsSchema,
validateApiAllTiersSchema,
validateCmsRewardsSchema,
} from "./output"
import { generateLoyaltyConfigTag } from "../../../utils/generateTag"
import { validateApiAllTiersSchema, validateCmsRewardsSchema } from "./output"
import type { Lang } from "@scandic-hotels/common/constants/language"
import type {
CMSRewardsResponse,
GetRewardRefsSchema,
} from "../../../types/reward"
import type { CMSRewardsResponse } from "../../../types/reward"
export function getUniqueRewardIds(rewardIds: string[]) {
const uniqueRewardIds = new Set(rewardIds)
@@ -88,44 +75,6 @@ export async function getCmsRewards(lang: Lang, rewardIds: string[]) {
generateLoyaltyConfigTag(lang, "reward", id)
)
const getContentstackRewardAllRefsCounter = createCounter(
"trpc.contentstack.reward.all.refs"
)
const metricsGetContentstackRewardAllRefs =
getContentstackRewardAllRefsCounter.init({ lang, rewardIds })
metricsGetContentstackRewardAllRefs.start()
const refsResponse = await request<GetRewardRefsSchema>(
GetRewardsRef,
{
locale: lang,
rewardIds,
},
{
key: rewardIds.map((rewardId) => generateRefsResponseTag(lang, rewardId)),
ttl: "max",
}
)
if (!refsResponse.data) {
metricsGetContentstackRewardAllRefs.noDataError()
throw notFoundError({
message: "GetRewardsRef returned no data",
errorDetails: { lang, rewardIds },
})
}
const validatedRefsData = rewardRefsSchema.safeParse(refsResponse)
if (!validatedRefsData.success) {
metricsGetContentstackRewardAllRefs.validationError(validatedRefsData.error)
return null
}
metricsGetContentstackRewardAllRefs.success()
const getContentstackRewardAllCounter = createCounter(
"trpc.contentstack.reward.all"
)
@@ -134,6 +83,8 @@ export async function getCmsRewards(lang: Lang, rewardIds: string[]) {
rewardIds,
})
metricsGetContentstackRewardAll.start()
const cmsRewardsResponse = await request<CMSRewardsResponse>(
GetRewards,
{