Files
web/server/routers/contentstack/metadata/query.ts
2024-08-23 09:38:13 +02:00

76 lines
2.1 KiB
TypeScript

import { GetLoyaltyPageMetaData } from "@/lib/graphql/Query/MetaDataLoyaltyPage.graphql"
import { GetMyPagesMetaData } from "@/lib/graphql/Query/MetaDataMyPages.graphql"
import { contentstackBaseProcedure, router } from "@/server/trpc"
import {
type GetLoyaltyPageMetaDataData,
type GetMyPagesMetaDataData,
validateLoyaltyPageMetaDataContentstackSchema,
validateMyPagesMetaDataContentstackSchema,
} from "./output"
import { getMetaData, getResponse, Variables } from "./utils"
import { PageTypeEnum } from "@/types/requests/pageType"
async function getLoyaltyPageMetaData(variables: Variables) {
const response = await getResponse<GetLoyaltyPageMetaDataData>(
GetLoyaltyPageMetaData,
variables
)
const validatedMetaDataData =
validateLoyaltyPageMetaDataContentstackSchema.safeParse(response.data)
if (!validatedMetaDataData.success) {
console.error(
`Failed to validate Loyaltypage MetaData Data - (url: ${variables.url})`
)
console.error(validatedMetaDataData.error)
return null
}
return getMetaData(validatedMetaDataData.data.all_loyalty_page.items[0])
}
async function getMyPagesMetaData(variables: Variables) {
const response = await getResponse<GetMyPagesMetaDataData>(
GetMyPagesMetaData,
variables
)
const validatedMetaDataData =
validateMyPagesMetaDataContentstackSchema.safeParse(response.data)
if (!validatedMetaDataData.success) {
console.error(
`Failed to validate My Page MetaData Data - (url: ${variables.url})`
)
console.error(validatedMetaDataData.error)
return null
}
return getMetaData(validatedMetaDataData.data.all_account_page.items[0])
}
export const metaDataQueryRouter = router({
get: contentstackBaseProcedure.query(async ({ ctx }) => {
if (!ctx.uid) {
return []
}
const variables = {
locale: ctx.lang,
url: ctx.pathname,
}
switch (ctx.contentType) {
case PageTypeEnum.accountPage:
return await getMyPagesMetaData(variables)
case PageTypeEnum.loyaltyPage:
return await getLoyaltyPageMetaData(variables)
default:
return []
}
}),
})