import { GetLoyaltyPageMetaData } from "@/lib/graphql/Query/MetaDataLoyaltyPage.graphql" import { GetMyPagesMetaData } from "@/lib/graphql/Query/MetaDataMyPages.graphql" import { contentstackExtendedProcedureUID, 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( GetLoyaltyPageMetaData, variables ) if (!response.data.all_loyalty_page.items[0].web?.seo_metadata?.title) { return null } 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( GetMyPagesMetaData, variables ) if (!response.data.all_account_page.items[0].web?.seo_metadata?.title) { return [] } 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: contentstackExtendedProcedureUID.query(async ({ ctx }) => { 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 [] } }), })