import { TRPCError } from "@trpc/server" import { z } from "zod" import { Lang } from "@/constants/languages" import { safeProtectedProcedure } from "@/server/trpc" import { getVerifiedUser } from "../../user/query" import { getPrimaryLinks } from "./getPrimaryLinks" import { getSecondaryLinks } from "./getSecondaryLinks" import type { MyPagesLink } from "./MyPagesLink" export const myPagesNavigation = safeProtectedProcedure .input( z.object({ lang: z.nativeEnum(Lang).optional(), }) ) .query( async ({ ctx, input, }): Promise<{ primaryLinks: MyPagesLink[] secondaryLinks: MyPagesLink[] } | null> => { if (!ctx.session) { return null } const lang = input.lang || ctx.lang if (!lang) { throw new TRPCError({ code: "BAD_REQUEST", message: "Language must be provided.", }) } const user = await getVerifiedUser({ session: ctx.session }) if (!user || user.error) { return null } const [primaryLinks, secondaryLinks] = await Promise.all([ getPrimaryLinks({ lang, memberships: user.data.memberships }), getSecondaryLinks({ lang }), ]) return { primaryLinks, secondaryLinks, } } )