import { TRPCError } from "@trpc/server" import { z } from "zod" import { Lang } from "@scandic-hotels/common/constants/language" import { safeTry } from "@scandic-hotels/common/utils/safeTry" import { safeProtectedProcedure } from "../../../procedures" import { isValidSession } from "../../../utils/session" import { getBasicUser } from "../../user/utils/getBasicUser" 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, error] = await safeTry( getBasicUser({ token: ctx.session.token }) ) if (!user || error) { return null } const [primaryLinks, secondaryLinks] = await Promise.all([ getPrimaryLinks({ lang, basicUserLoyalty: user.loyalty }), getSecondaryLinks({ lang }), ]) return { primaryLinks, secondaryLinks, } } )