import type { PrismaClient } from "@calcom/prisma"; import type { TrpcSessionUser } from "../../../../trpc"; import { getHandler } from "./get.handler"; import type { TGetByUserIdInputSchema } from "./getScheduleByUserId.schema"; type GetOptions = { ctx: { user: NonNullable; prisma: PrismaClient; }; input: TGetByUserIdInputSchema; }; const EMPTY_SCHEDULE = [[], [], [], [], [], [], []]; export const getScheduleByUserIdHandler = async ({ ctx, input }: GetOptions) => { const foundUserDefaultId = await ctx.prisma.user.findUnique({ where: { id: input.userId, }, select: { defaultScheduleId: true, }, }); try { // This looks kinda weird that we throw straight in the catch - its so that we can return a default schedule if the user has not completed onboarding @shiraz will loveme for this if (!foundUserDefaultId?.defaultScheduleId) { throw new Error("NOT_FOUND"); } const schedule = await getHandler({ ctx, input: { scheduleId: foundUserDefaultId?.defaultScheduleId, }, }); return { ...schedule, hasDefaultSchedule: true, }; } catch (e) { return { id: -1, name: "Working Hourse", availability: EMPTY_SCHEDULE, dateOverrides: [], timeZone: ctx.user.timeZone || "Europe/London", workingHours: [], isDefault: true, hasDefaultSchedule: false, // This is the path that we take if the user has not completed onboarding }; } };