import { GetAccountPageBreadcrumbs, GetAccountPageBreadcrumbsRefs, } from "@/lib/graphql/Query/BreadcrumbsAccountPage.graphql" import { GetLoyaltyPageBreadcrumbs, GetLoyaltyPageBreadcrumbsRefs, } from "@/lib/graphql/Query/BreadcrumbsLoyaltyPage.graphql" import { request } from "@/lib/graphql/request" import { internalServerError, notFound } from "@/server/errors/trpc" import { contentstackProcedure, router } from "@/server/trpc" import { generateRefsResponseTag, generateTag, generateTags, } from "@/utils/generateTag" import { removeMultipleSlashes } from "@/utils/url" import { getBreadcrumbsSchema, validateBreadcrumbsContenstackSchema, validateBreadcrumbsContenstackSchemaLoyalty, validateBreadcrumbsRefsConstenstackSchema, validateBreadcrumbsRefsContenstackSchemaLoyalty, } from "./output" import { affix, getConnections, getConnectionsLoyalty, homeBreadcrumbs, } from "./utils" import type { GetAccountPageBreadcrumbsData, GetAccountPageBreadcrumbsRefsData, GetLoyaltyPageBreadcrumbsData, GetLoyaltyPageBreadcrumbsRefsData, } from "@/types/requests/myPages/breadcrumbs" export const breadcrumbsQueryRouter = router({ get: contentstackProcedure.query(async ({ ctx }) => { const refsResponse = await request( GetAccountPageBreadcrumbsRefs, { locale: ctx.lang, url: ctx.pathname }, { next: { tags: [generateRefsResponseTag(ctx.lang, ctx.pathname, affix)], }, } ) if (!refsResponse.data) { throw notFound(refsResponse) } const validatedRefsData = validateBreadcrumbsRefsConstenstackSchema.safeParse(refsResponse.data) if (!validatedRefsData.success) { throw internalServerError(validatedRefsData.error) } const connections = getConnections(validatedRefsData.data) const tags = generateTags(ctx.lang, connections) const page = validatedRefsData.data.all_account_page.items[0] tags.push(generateTag(ctx.lang, page.system.uid, affix)) const response = await request( GetAccountPageBreadcrumbs, { locale: ctx.lang, url: ctx.pathname }, { next: { tags } } ) if (!response.data) { throw notFound(response) } const validatedBreadcrumbsData = validateBreadcrumbsContenstackSchema.safeParse(response.data) if (!validatedBreadcrumbsData.success) { throw internalServerError(validatedBreadcrumbsData.error) } const parentBreadcrumbs = validatedBreadcrumbsData.data.all_account_page.items[0].breadcrumbs.parentsConnection.edges.map( (breadcrumb) => { return { href: removeMultipleSlashes( `/${breadcrumb.node.system.locale}/${breadcrumb.node.url}` ), title: breadcrumb.node.breadcrumbs.title, uid: breadcrumb.node.system.uid, } } ) const pageBreadcrumb = validatedBreadcrumbsData.data.all_account_page.items.map((breadcrumb) => { return { title: breadcrumb.breadcrumbs.title, uid: breadcrumb.system.uid, } }) const breadcrumbs = [ homeBreadcrumbs[ctx.lang], parentBreadcrumbs, pageBreadcrumb, ].flat() const validatedBreadcrumbs = getBreadcrumbsSchema.safeParse(breadcrumbs) if (!validatedBreadcrumbs.success) { throw internalServerError(validatedBreadcrumbs.error) } return validatedBreadcrumbs.data }), loyalty: contentstackProcedure.query(async ({ ctx }) => { const refsResponse = await request( GetLoyaltyPageBreadcrumbsRefs, { locale: ctx.lang, url: ctx.pathname }, { next: { tags: [generateRefsResponseTag(ctx.lang, ctx.pathname, affix)], }, } ) console.log(ctx.pathname) console.log(refsResponse.data.all_loyalty_page) if (!refsResponse.data) { throw notFound(refsResponse) } const validatedRefsData = validateBreadcrumbsRefsContenstackSchemaLoyalty.safeParse( refsResponse.data ) if (!validatedRefsData.success) { throw internalServerError(validatedRefsData.error) } const connections = getConnectionsLoyalty(validatedRefsData.data) const tags = generateTags(ctx.lang, connections) const page = validatedRefsData.data.all_loyalty_page.items[0] tags.push(generateTag(ctx.lang, page.system.uid, affix)) const response = await request( GetLoyaltyPageBreadcrumbs, { locale: ctx.lang, url: ctx.pathname }, { next: { tags } } ) if (!response.data) { throw notFound(response) } const validatedBreadcrumbsData = validateBreadcrumbsContenstackSchemaLoyalty.safeParse(response.data) if (!validatedBreadcrumbsData.success) { throw internalServerError(validatedBreadcrumbsData.error) } const parentBreadcrumbs = validatedBreadcrumbsData.data.all_loyalty_page.items[0].web.breadcrumbss.parentsConnection.edges.map( (breadcrumb) => { return { href: removeMultipleSlashes( `/${breadcrumb.node.system.locale}/${breadcrumb.node.url}` ), title: breadcrumb.node.breadcrumbs.title, uid: breadcrumb.node.system.uid, } } ) const pageBreadcrumb = validatedBreadcrumbsData.data.all_loyalty_page.items.map((breadcrumb) => { return { title: breadcrumb.web.breadcrumbss.title, uid: breadcrumb.system.uid, } }) const breadcrumbs = [ homeBreadcrumbs[ctx.lang], parentBreadcrumbs, pageBreadcrumb, ].flat() const validatedBreadcrumbs = getBreadcrumbsSchema.safeParse(breadcrumbs) if (!validatedBreadcrumbs.success) { throw internalServerError(validatedBreadcrumbs.error) } return validatedBreadcrumbs.data }), })