Feat/BOOK-424 campaign banner
Approved-by: Bianca Widstam
This commit is contained in:
@@ -11,7 +11,10 @@ import {
|
||||
GetSiteConfig,
|
||||
GetSiteConfigRef,
|
||||
} from "../../../graphql/Query/SiteConfig.graphql"
|
||||
// import { router } from "../../.."
|
||||
import {
|
||||
GetSitewideCampaignBanner,
|
||||
GetSitewideCampaignBannerRef,
|
||||
} from "../../../graphql/Query/SitewideCampaignBanner.graphql"
|
||||
import { request } from "../../../graphql/request"
|
||||
import { contentstackBaseProcedure } from "../../../procedures"
|
||||
import { langInput } from "../../../utils"
|
||||
@@ -27,6 +30,8 @@ import {
|
||||
headerSchema,
|
||||
siteConfigRefSchema,
|
||||
siteConfigSchema,
|
||||
sitewideCampaignBannerRefSchema,
|
||||
sitewideCampaignBannerSchema,
|
||||
validateContactConfigSchema,
|
||||
validateFooterConfigSchema,
|
||||
validateFooterRefConfigSchema,
|
||||
@@ -36,6 +41,7 @@ import {
|
||||
getConnections,
|
||||
getFooterConnections,
|
||||
getSiteConfigConnections,
|
||||
getSitewideCampaignBannerConnections,
|
||||
} from "./utils"
|
||||
|
||||
import type { Lang } from "@scandic-hotels/common/constants/language"
|
||||
@@ -48,6 +54,8 @@ import type {
|
||||
import type {
|
||||
GetSiteConfigData,
|
||||
GetSiteConfigRefData,
|
||||
GetSitewideCampaignBannerData,
|
||||
GetSitewideCampaignBannerRefData,
|
||||
} from "../../../types/siteConfig"
|
||||
|
||||
const getContactConfig = cache(async (lang: Lang) => {
|
||||
@@ -248,6 +256,97 @@ export const baseQueryRouter = router({
|
||||
|
||||
return validatedFooterConfig.data
|
||||
}),
|
||||
sitewideCampaignBanner: router({
|
||||
get: contentstackBaseProcedure
|
||||
.input(langInput)
|
||||
.query(async ({ input, ctx }) => {
|
||||
const lang = input.lang ?? ctx.lang
|
||||
|
||||
const getSitewideCampaignBannerRefsCounter = createCounter(
|
||||
"trpc.contentstack",
|
||||
"sitewideCampaignBanner.get.refs"
|
||||
)
|
||||
const metricsGetSitewideCampaignBannerRefs =
|
||||
getSitewideCampaignBannerRefsCounter.init({
|
||||
lang,
|
||||
})
|
||||
|
||||
metricsGetSitewideCampaignBannerRefs.start()
|
||||
|
||||
const responseRef = await request<GetSitewideCampaignBannerRefData>(
|
||||
GetSitewideCampaignBannerRef,
|
||||
{ locale: lang },
|
||||
{
|
||||
key: generateRefsResponseTag(lang, "sitewide_campaign_banner"),
|
||||
ttl: "max",
|
||||
}
|
||||
)
|
||||
|
||||
if (!responseRef.data) {
|
||||
const notFoundError = notFound(responseRef)
|
||||
metricsGetSitewideCampaignBannerRefs.noDataError()
|
||||
throw notFoundError
|
||||
}
|
||||
|
||||
const validatedSitewideCampaignBannerRef =
|
||||
sitewideCampaignBannerRefSchema.safeParse(responseRef.data)
|
||||
|
||||
if (!validatedSitewideCampaignBannerRef.success) {
|
||||
metricsGetSitewideCampaignBannerRefs.validationError(
|
||||
validatedSitewideCampaignBannerRef.error
|
||||
)
|
||||
return null
|
||||
}
|
||||
|
||||
const connections = getSitewideCampaignBannerConnections(
|
||||
validatedSitewideCampaignBannerRef.data
|
||||
)
|
||||
|
||||
const tags = [generateTagsFromSystem(lang, connections)].flat()
|
||||
|
||||
metricsGetSitewideCampaignBannerRefs.success()
|
||||
|
||||
const getSitewideCampaignBannerCounter = createCounter(
|
||||
"trpc.contentstack",
|
||||
"sitewideCampaignBanner.get"
|
||||
)
|
||||
const metricsGetSitewideCampaignBanner =
|
||||
getSitewideCampaignBannerCounter.init({
|
||||
lang,
|
||||
})
|
||||
|
||||
metricsGetSitewideCampaignBanner.start()
|
||||
|
||||
const sitewideCampaignBannerResponse =
|
||||
await request<GetSitewideCampaignBannerData>(
|
||||
GetSitewideCampaignBanner,
|
||||
{ locale: lang },
|
||||
{ key: tags, ttl: "max" }
|
||||
)
|
||||
|
||||
if (!sitewideCampaignBannerResponse.data) {
|
||||
const notFoundError = notFound(sitewideCampaignBannerResponse)
|
||||
metricsGetSitewideCampaignBanner.noDataError()
|
||||
throw notFoundError
|
||||
}
|
||||
|
||||
const validatedSitewideCampaignBanner =
|
||||
sitewideCampaignBannerSchema.safeParse(
|
||||
sitewideCampaignBannerResponse.data
|
||||
)
|
||||
|
||||
if (!validatedSitewideCampaignBanner.success) {
|
||||
metricsGetSitewideCampaignBanner.validationError(
|
||||
validatedSitewideCampaignBanner.error
|
||||
)
|
||||
return null
|
||||
}
|
||||
|
||||
metricsGetSitewideCampaignBanner.success()
|
||||
|
||||
return validatedSitewideCampaignBanner.data
|
||||
}),
|
||||
}),
|
||||
siteConfig: contentstackBaseProcedure
|
||||
.input(langInput)
|
||||
.query(async ({ input, ctx }) => {
|
||||
|
||||
Reference in New Issue
Block a user