import type { NextApiRequest, NextApiResponse } from "next"; import prisma from "../../../lib/prisma"; import { getBusyCalendarTimes } from "../../../lib/calendarClient"; import { getBusyVideoTimes } from "../../../lib/videoClient"; import dayjs from "dayjs"; export default async function handler(req: NextApiRequest, res: NextApiResponse) { const { user } = req.query; const currentUser = await prisma.user.findFirst({ where: { username: user, }, select: { credentials: true, timeZone: true, bufferTime: true, id: true, }, }); const selectedCalendars = await prisma.selectedCalendar.findMany({ where: { userId: currentUser.id, }, }); const hasCalendarIntegrations = currentUser.credentials.filter((cred) => cred.type.endsWith("_calendar")).length > 0; const hasVideoIntegrations = currentUser.credentials.filter((cred) => cred.type.endsWith("_video")).length > 0; const calendarAvailability = await getBusyCalendarTimes( currentUser.credentials, req.query.dateFrom, req.query.dateTo, selectedCalendars ); const videoAvailability = await getBusyVideoTimes( currentUser.credentials, req.query.dateFrom, req.query.dateTo ); let commonAvailability = []; if (hasCalendarIntegrations && hasVideoIntegrations) { commonAvailability = calendarAvailability.filter((availability) => videoAvailability.includes(availability) ); } else if (hasVideoIntegrations) { commonAvailability = videoAvailability; } else if (hasCalendarIntegrations) { commonAvailability = calendarAvailability; } commonAvailability = commonAvailability.map((a) => ({ start: dayjs(a.start).subtract(currentUser.bufferTime, "minute").toString(), end: dayjs(a.end).add(currentUser.bufferTime, "minute").toString(), })); res.status(200).json(commonAvailability); }