import { GetLoyaltyPageBreadcrumbs, GetLoyaltyPageBreadcrumbsRefs, } from "@/lib/graphql/Query/BreadcrumbsLoyaltyPage.graphql" import { GetMyPagesBreadcrumbs, GetMyPagesBreadcrumbsRefs, } from "@/lib/graphql/Query/BreadcrumbsMyPages.graphql" import { internalServerError } from "@/server/errors/trpc" import { contentstackProcedure, router } from "@/server/trpc" import { validateLoyaltyPageBreadcrumbsContentstackSchema, validateLoyaltyPageBreadcrumbsRefsContentstackSchema, validateMyPagesBreadcrumbsContentstackSchema, validateMyPagesBreadcrumbsRefsContentstackSchema, } from "./output" import { getBreadcrumbs, getRefsResponse, getResponse, getTags, Variables, } from "./utils" import type { GetLoyaltyPageBreadcrumbsData, GetLoyaltyPageBreadcrumbsRefsData, GetMyPagesBreadcrumbsData, GetMyPagesBreadcrumbsRefsData, } from "@/types/requests/myPages/breadcrumbs" import { PageTypeEnum } from "@/types/requests/pageType" async function getLoyaltyPageBreadcrumbs(variables: Variables) { const refsResponse = await getRefsResponse( GetLoyaltyPageBreadcrumbsRefs, variables ) const validatedRefsData = validateLoyaltyPageBreadcrumbsRefsContentstackSchema.safeParse( refsResponse.data ) if (!validatedRefsData.success) { throw internalServerError(validatedRefsData.error) } const tags = getTags(validatedRefsData.data.all_loyalty_page, variables) const response = await getResponse( GetLoyaltyPageBreadcrumbs, variables, tags ) const validatedBreadcrumbsData = validateLoyaltyPageBreadcrumbsContentstackSchema.safeParse(response.data) if (!validatedBreadcrumbsData.success) { throw internalServerError(validatedBreadcrumbsData.error) } return getBreadcrumbs( validatedBreadcrumbsData.data.all_loyalty_page.items[0], variables.locale ) } async function getMyPagesBreadcrumbs(variables: Variables) { const refsResponse = await getRefsResponse( GetMyPagesBreadcrumbsRefs, variables ) const validatedRefsData = validateMyPagesBreadcrumbsRefsContentstackSchema.safeParse( refsResponse.data ) if (!validatedRefsData.success) { throw internalServerError(validatedRefsData.error) } const tags = getTags(validatedRefsData.data.all_account_page, variables) const response = await getResponse( GetMyPagesBreadcrumbs, variables, tags ) const validatedBreadcrumbsData = validateMyPagesBreadcrumbsContentstackSchema.safeParse(response.data) if (!validatedBreadcrumbsData.success) { throw internalServerError(validatedBreadcrumbsData.error) } return getBreadcrumbs( validatedBreadcrumbsData.data.all_account_page.items[0], variables.locale ) } export const breadcrumbsQueryRouter = router({ get: contentstackProcedure.query(async ({ ctx }) => { const variables = { locale: ctx.lang, url: ctx.pathname, } switch (ctx.contentType) { case PageTypeEnum.accountPage: return await getMyPagesBreadcrumbs(variables) case PageTypeEnum.loyaltyPage: return await getLoyaltyPageBreadcrumbs(variables) default: return [] } }), })