import { badRequestError, internalServerError } from "@/server/errors/trpc" import { validateBreadcrumbsConstenstackSchema } from "./output" import { publicProcedure, router } from "@/server/trpc" import { request } from "@/lib/graphql/request" import { GetMyPagesBreadcrumbs } from "@/lib/graphql/Query/BreadcrumbsMyPages.graphql" import { getBreadcrumbsInput } from "./input" import { GetMyPagesBreadcrumbsData } from "@/types/requests/myPages/breadcrumbs" export const breadcrumbsQueryRouter = router({ get: publicProcedure.input(getBreadcrumbsInput).query(async ({ input }) => { try { const response = await request( GetMyPagesBreadcrumbs, { locale: input.locale, url: input.href } ) if (!response.data) { throw badRequestError() } const validatedBreadcrumbs = validateBreadcrumbsConstenstackSchema.safeParse(response.data) if (!validatedBreadcrumbs.success) { throw badRequestError() } const parentBreadcrumbs = validatedBreadcrumbs.data.all_account_page.items[0].breadcrumbs.parents.edges.map( (breadcrumb) => { return { href: breadcrumb.node.url, title: breadcrumb.node.breadcrumbs.title, uid: breadcrumb.node.system.uid, } } ) const pageBreadcrumb = validatedBreadcrumbs.data.all_account_page.items.map((breadcrumb) => { return { href: "", title: breadcrumb.breadcrumbs.title, uid: breadcrumb.system.uid, } }) const breadcrumbs = [parentBreadcrumbs, pageBreadcrumb].flat() return breadcrumbs } catch (error) { console.info(`Get My Pages Breadcrumbs Error`) console.error(error) throw internalServerError() } }), })