import { TRPCError } from "@trpc/server" import { z } from "zod" import { Lang } from "@scandic-hotels/common/constants/language" import { safeProtectedProcedure } from "@scandic-hotels/trpc/procedures" import { getVerifiedUser } from "@scandic-hotels/trpc/routers/user/utils" import { isValidSession } from "@scandic-hotels/trpc/utils/session" 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 (!isValidSession(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, userLoyalty: user.data.loyalty }), getSecondaryLinks({ lang }), ]) return { primaryLinks, secondaryLinks, } } )