feat(SW-497): Changed to siteConfig which includes Global Alert

This commit is contained in:
Erik Tiekstra
2024-10-03 11:29:26 +02:00
parent 78569fcb21
commit 3f12246e12
6 changed files with 166 additions and 120 deletions

View File

@@ -1,3 +1,4 @@
import { Lang } from "@/constants/languages"
import { GetContactConfig } from "@/lib/graphql/Query/ContactConfig.graphql"
import {
GetCurrentFooter,
@@ -9,7 +10,7 @@ import {
} from "@/lib/graphql/Query/Current/Header.graphql"
import { GetFooter, GetFooterRef } from "@/lib/graphql/Query/Footer.graphql"
import { GetHeader, GetHeaderRef } from "@/lib/graphql/Query/Header.graphql"
import { GetSiteConfiguration } from "@/lib/graphql/Query/SiteConfiguration.graphql"
import { GetSiteConfig } from "@/lib/graphql/Query/SiteConfig.graphql"
import { request } from "@/lib/graphql/request"
import { notFound } from "@/server/errors/trpc"
import { contentstackBaseProcedure, router } from "@/server/trpc"
@@ -30,7 +31,7 @@ import {
type GetCurrentHeaderData,
headerRefsSchema,
headerSchema,
siteConfigurationSchema,
siteConfigSchema,
validateContactConfigSchema,
validateCurrentFooterConfigSchema,
validateCurrentHeaderConfigSchema,
@@ -61,11 +62,15 @@ import {
getHeaderRefsFailCounter,
getHeaderRefsSuccessCounter,
getHeaderSuccessCounter,
getSiteConfigurationCounter,
getSiteConfigurationFailCounter,
getSiteConfigurationSuccessCounter,
getSiteConfigCounter,
getSiteConfigFailCounter,
getSiteConfigSuccessCounter,
} from "./telemetry"
import { getConnections, getFooterConnections } from "./utils"
import {
getConnections,
getFooterConnections,
getGlobalAlertPhoneContactData,
} from "./utils"
import type {
FooterDataRaw,
@@ -75,71 +80,74 @@ import type {
GetHeader as GetHeaderData,
GetHeaderRefs,
} from "@/types/trpc/routers/contentstack/header"
import type { GetSiteConfigurationData } from "@/types/trpc/routers/contentstack/siteConfiguration"
import type { GetSiteConfigData } from "@/types/trpc/routers/contentstack/siteConfig"
async function getContactConfig(lang: Lang) {
getContactConfigCounter.add(1, { lang })
console.info(
"contentstack.contactConfig start",
JSON.stringify({ query: { lang } })
)
const response = await request<ContactConfigData>(
GetContactConfig,
{
locale: lang,
},
{
cache: "force-cache",
next: {
tags: [`${lang}:contact`],
},
}
)
if (!response.data) {
const notFoundError = notFound(response)
getContactConfigFailCounter.add(1, {
lang,
error_type: "not_found",
error: JSON.stringify({ code: notFoundError.code }),
})
console.error(
"contentstack.config not found error",
JSON.stringify({ query: { lang }, error: { code: notFoundError.code } })
)
throw notFoundError
}
const validatedContactConfigConfig = validateContactConfigSchema.safeParse(
response.data
)
if (!validatedContactConfigConfig.success) {
getContactConfigFailCounter.add(1, {
lang,
error_type: "validation_error",
error: JSON.stringify(validatedContactConfigConfig.error),
})
console.error(
"contentstack.contactConfig validation error",
JSON.stringify({
query: { lang },
error: validatedContactConfigConfig.error,
})
)
return null
}
getContactConfigSuccessCounter.add(1, { lang })
console.info(
"contentstack.contactConfig success",
JSON.stringify({ query: { lang } })
)
return validatedContactConfigConfig.data.all_contact_config.items[0]
}
export const baseQueryRouter = router({
contact: contentstackBaseProcedure.query(async ({ ctx }) => {
const { lang } = ctx
getContactConfigCounter.add(1, { lang })
console.info(
"contentstack.contactConfig start",
JSON.stringify({ query: { lang } })
)
const response = await request<ContactConfigData>(
GetContactConfig,
{
locale: lang,
},
{
cache: "force-cache",
next: {
tags: [`${lang}:contact`],
},
}
)
if (!response.data) {
const notFoundError = notFound(response)
getContactConfigFailCounter.add(1, {
lang,
error_type: "not_found",
error: JSON.stringify({ code: notFoundError.code }),
})
console.error(
"contentstack.config not found error",
JSON.stringify({ query: { lang }, error: { code: notFoundError.code } })
)
throw notFoundError
}
const validatedContactConfigConfig = validateContactConfigSchema.safeParse(
response.data
)
if (!validatedContactConfigConfig.success) {
getContactConfigFailCounter.add(1, {
lang,
error_type: "validation_error",
error: JSON.stringify(validatedContactConfigConfig.error),
})
console.error(
"contentstack.contactConfig validation error",
JSON.stringify({
query: { lang },
error: validatedContactConfigConfig.error,
})
)
return null
}
getContactConfigSuccessCounter.add(1, { lang })
console.info(
"contentstack.contactConfig success",
JSON.stringify({ query: { lang } })
)
return validatedContactConfigConfig.data.all_contact_config.items[0]
return await getContactConfig(ctx.lang)
}),
header: contentstackBaseProcedure.query(async ({ ctx }) => {
const { lang } = ctx
@@ -594,67 +602,83 @@ export const baseQueryRouter = router({
return validatedFooterConfig.data
}),
siteConfiguration: contentstackBaseProcedure.query(async ({ ctx }) => {
siteConfig: contentstackBaseProcedure.query(async ({ ctx }) => {
const { lang } = ctx
getSiteConfigurationCounter.add(1, { lang })
getSiteConfigCounter.add(1, { lang })
console.info(
"contentstack.siteConfiguration start",
"contentstack.siteConfig start",
JSON.stringify({ query: { lang } })
)
const response = await request<GetSiteConfigurationData>(
GetSiteConfiguration,
{
locale: lang,
},
{
cache: "force-cache",
next: {
tags: [`${lang}:siteConfiguration`],
const [siteConfigResponse, contactConfig] = await Promise.all([
request<GetSiteConfigData>(
GetSiteConfig,
{
locale: lang,
},
}
)
{
cache: "force-cache",
next: {
tags: [`${lang}:siteConfig`],
},
}
),
getContactConfig(lang),
])
if (!response.data) {
const notFoundError = notFound(response)
if (!siteConfigResponse.data) {
const notFoundError = notFound(siteConfigResponse)
getSiteConfigurationFailCounter.add(1, {
getSiteConfigFailCounter.add(1, {
lang,
error_type: "not_found",
error: JSON.stringify({ code: notFoundError.code }),
})
console.error(
"contentstack.siteConfiguration not found error",
"contentstack.siteConfig not found error",
JSON.stringify({ query: { lang }, error: { code: notFoundError.code } })
)
throw notFoundError
}
const validatedSiteConfiguration = siteConfigurationSchema.safeParse(
response.data
const validatedSiteConfig = siteConfigSchema.safeParse(
siteConfigResponse.data
)
if (!validatedSiteConfiguration.success) {
getSiteConfigurationFailCounter.add(1, {
if (!validatedSiteConfig.success) {
getSiteConfigFailCounter.add(1, {
lang,
error_type: "validation_error",
error: JSON.stringify(validatedSiteConfiguration.error),
error: JSON.stringify(validatedSiteConfig.error),
})
console.error(
"contentstack.siteConfiguration validation error",
"contentstack.siteConfig validation error",
JSON.stringify({
query: { lang },
error: validatedSiteConfiguration.error,
error: validatedSiteConfig.error,
})
)
return null
}
getSiteConfigurationSuccessCounter.add(1, { lang })
getSiteConfigSuccessCounter.add(1, { lang })
console.info(
"contentstack.siteConfiguration success",
"contentstack.siteConfig success",
JSON.stringify({ query: { lang } })
)
return validatedSiteConfiguration.data
const { globalAlert } = validatedSiteConfig.data
return {
...validatedSiteConfig.data,
globalAlert: globalAlert
? {
...globalAlert,
phone_contact: contactConfig
? getGlobalAlertPhoneContactData(globalAlert, contactConfig)
: null,
}
: null,
}
}),
})