diff --git a/jest.setup.ts b/jest.setup.ts index b764cee58f..d26c6b4183 100644 --- a/jest.setup.ts +++ b/jest.setup.ts @@ -1,6 +1,6 @@ import prisma from "@calcom/prisma"; afterEach((done) => { - prisma.$disconnect().then(); + prisma().$disconnect().then(); done(); }); diff --git a/lib/helpers/customApiEndpoints.ts b/lib/helpers/customApiEndpoints.ts new file mode 100644 index 0000000000..55d7dc78a2 --- /dev/null +++ b/lib/helpers/customApiEndpoints.ts @@ -0,0 +1,20 @@ +import { NextMiddleware } from "next-api-middleware"; + +import prisma from "@calcom/prisma"; + +// This replaces the prisma client for the cusotm one if the customApiId is valid +export const customApiEndpoints: NextMiddleware = async (req, res, next) => { + const { + query: { customApiId }, + } = req; + // If no custom api Id is provided, return the regular cal.com prisma client. + if (!customApiId) { + req.prisma = prisma(); + await next(); + } + // Hardcoded new database, this should be a dynamic call to console prisma/api? + const newDatabseUrl = process.env.DATABASE_PROD_URL; + req.prisma = prisma(newDatabseUrl); + + await next(); +}; diff --git a/lib/helpers/extendRequest.ts b/lib/helpers/extendRequest.ts new file mode 100644 index 0000000000..ac9e54d5ed --- /dev/null +++ b/lib/helpers/extendRequest.ts @@ -0,0 +1,19 @@ +import type { IncomingMessage } from "http"; +import { NextMiddleware } from "next-api-middleware"; + +import type { PrismaClient } from ".prisma/client"; + +/** @todo figure how to use the one from `@calcom/types`fi */ +/** @todo: remove once `@calcom/types` is updated with it.*/ +declare module "next" { + export interface NextApiRequest extends IncomingMessage { + userId: number; + method: string; + prisma: PrismaClient; + body: any; + query: { [key: string]: string | string[] }; + } +} +export const extendRequest: NextMiddleware = async (req, res, next) => { + await next(); +}; diff --git a/lib/helpers/verifyApiKey.ts b/lib/helpers/verifyApiKey.ts index c45f3d3c3f..d350f4e1f3 100644 --- a/lib/helpers/verifyApiKey.ts +++ b/lib/helpers/verifyApiKey.ts @@ -1,18 +1,19 @@ -import type { IncomingMessage } from "http"; +// import type { IncomingMessage } from "http"; import { NextMiddleware } from "next-api-middleware"; import { hashAPIKey } from "@calcom/ee/lib/api/apiKeys"; -import prisma from "@calcom/prisma"; -/** @todo figure how to use the one from `@calcom/types`fi */ -/** @todo: remove once `@calcom/types` is updated with it.*/ -declare module "next" { - export interface NextApiRequest extends IncomingMessage { - userId: number; - method: string; - query: { [key: string]: string | string[] }; - } -} +// // import prisma from "@calcom/prisma"; + +// /** @todo figure how to use the one from `@calcom/types`fi */ +// /** @todo: remove once `@calcom/types` is updated with it.*/ +// declare module "next" { +// export interface NextApiRequest extends IncomingMessage { +// userId: number; +// method: string; +// query: { [key: string]: string | string[] }; +// } +// } // Used to check if the apiKey is not expired, could be extracted if reused. but not for now. export const dateNotInPast = function (date: Date) { @@ -24,6 +25,7 @@ export const dateNotInPast = function (date: Date) { // This verifies the apiKey and sets the user if it is valid. export const verifyApiKey: NextMiddleware = async (req, res, next) => { + const { prisma } = req; if (!req.query.apiKey) return res.status(401).json({ message: "No apiKey provided" }); // We remove the prefix from the user provided api_key. If no env set default to "cal_" const strippedApiKey = `${req.query.apiKey}`.replace(process.env.API_KEY_PREFIX || "cal_", ""); diff --git a/lib/helpers/withMiddleware.ts b/lib/helpers/withMiddleware.ts index c926eff4ec..73eef171f9 100644 --- a/lib/helpers/withMiddleware.ts +++ b/lib/helpers/withMiddleware.ts @@ -2,6 +2,8 @@ import { label } from "next-api-middleware"; import { addRequestId } from "./addRequestid"; import { captureErrors } from "./captureErrors"; +import { customApiEndpoints } from "./customApiEndpoints"; +import { extendRequest } from "./extendRequest"; import { HTTP_POST, HTTP_DELETE, @@ -22,9 +24,11 @@ const withMiddleware = label( HTTP_DELETE, addRequestId, verifyApiKey, + customApiEndpoints, + extendRequest, sentry: captureErrors, }, - ["sentry", "verifyApiKey", "addRequestId"] // <-- Provide a list of middleware to call automatically + ["sentry", "customApiEndpoints", "verifyApiKey", "addRequestId", "extendRequest"] // <-- Provide a list of middleware to call automatically ); export { withMiddleware }; diff --git a/lib/utils/isAdmin.ts b/lib/utils/isAdmin.ts index 64af37367f..4991934509 100644 --- a/lib/utils/isAdmin.ts +++ b/lib/utils/isAdmin.ts @@ -3,6 +3,6 @@ import { UserPermissionRole } from "@prisma/client"; import prisma from "@calcom/prisma"; export const isAdminGuard = async (userId: number) => { - const user = await prisma.user.findUnique({ where: { id: userId } }); + const user = await prisma().user.findUnique({ where: { id: userId } }); return user?.role === UserPermissionRole.ADMIN; }; diff --git a/pages/api/attendees/[id].ts b/pages/api/attendees/[id].ts index a1674d87a4..c37e92b9ba 100644 --- a/pages/api/attendees/[id].ts +++ b/pages/api/attendees/[id].ts @@ -1,9 +1,9 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - +// // import prisma from "@calcom/prisma"; import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { AttendeeResponse } from "@lib/types"; +import { isAdminGuard } from "@lib/utils/isAdmin"; import { schemaAttendeeEditBodyParams, schemaAttendeeReadPublic } from "@lib/validations/attendee"; import { schemaQueryIdParseInt, @@ -11,9 +11,10 @@ import { } from "@lib/validations/shared/queryIdTransformParseInt"; export async function attendeeById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { + const isAdmin = await isAdminGuard(userId); const safeQuery = schemaQueryIdParseInt.safeParse(query); if (!safeQuery.success) { res.status(400).json({ error: safeQuery.error }); @@ -34,8 +35,10 @@ export async function attendeeById( .map((attendee) => attendee.id) ); // @note: Here we make sure to only return attendee's of the user's own bookings. - if (!userBookingsAttendeeIds.includes(safeQuery.data.id)) res.status(401).json({ message: "Unauthorized" }); - else { + if (!isAdmin) { + if (!userBookingsAttendeeIds.includes(safeQuery.data.id)) + res.status(401).json({ message: "Unauthorized" }); + } else { switch (method) { /** * @swagger diff --git a/pages/api/attendees/index.ts b/pages/api/attendees/index.ts index eaae0b28ff..25f459823e 100644 --- a/pages/api/attendees/index.ts +++ b/pages/api/attendees/index.ts @@ -1,24 +1,31 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import db from "@calcom/prisma"; - +// import db from "@calcom/prisma"; import { withMiddleware } from "@lib/helpers/withMiddleware"; -import { AttendeeResponse, AttendeesResponse } from "@lib/types"; +import type { AttendeeResponse, AttendeesResponse } from "@lib/types"; +import { isAdminGuard } from "@lib/utils/isAdmin"; import { schemaAttendeeCreateBodyParams, schemaAttendeeReadPublic } from "@lib/validations/attendee"; async function createOrlistAllAttendees( - { method, userId, body }: NextApiRequest, + { method, userId, body, prisma }: NextApiRequest, res: NextApiResponse ) { - const userBookings = await db.booking.findMany({ - where: { - userId, - }, - include: { - attendees: true, - }, - }); - const attendees = userBookings.map((booking) => booking.attendees).flat(); + const isAdmin = await isAdminGuard(userId); + let attendees; + if (!isAdmin) { + const userBookings = await prisma.booking.findMany({ + where: { + userId, + }, + include: { + attendees: true, + }, + }); + attendees = userBookings.map((booking) => booking.attendees).flat(); + } else { + const data = await prisma.attendee.findMany(); + attendees = data.map((attendee) => schemaAttendeeReadPublic.parse(attendee)); + } if (method === "GET") { /** * @swagger @@ -37,12 +44,7 @@ async function createOrlistAllAttendees( * description: No attendees were found */ if (attendees) res.status(200).json({ attendees }); - else - (error: Error) => - res.status(404).json({ - message: "No Attendees were found", - error, - }); + else (error: Error) => res.status(400).json({ error }); } else if (method === "POST") { /** * @swagger @@ -90,16 +92,40 @@ async function createOrlistAllAttendees( res.status(400).json({ message: "Invalid request body", error: safePost.error }); return; } - const userWithBookings = await db.user.findUnique({ where: { id: userId }, include: { bookings: true } }); - if (!userWithBookings) { - res.status(404).json({ message: "User not found" }); - return; - } - const userBookingIds = userWithBookings.bookings.map((booking: { id: number }) => booking.id).flat(); - // Here we make sure to only return attendee's of the user's own bookings. - if (!userBookingIds.includes(safePost.data.bookingId)) res.status(401).json({ message: "Unauthorized" }); - else { - const data = await db.attendee.create({ + if (!isAdmin) { + const userWithBookings = await prisma.user.findUnique({ + where: { id: userId }, + include: { bookings: true }, + }); + if (!userWithBookings) { + res.status(404).json({ message: "User not found" }); + return; + } + const userBookingIds = userWithBookings.bookings.map((booking: { id: number }) => booking.id).flat(); + // Here we make sure to only return attendee's of the user's own bookings. + if (!userBookingIds.includes(safePost.data.bookingId)) + res.status(401).json({ message: "Unauthorized" }); + else { + const data = await prisma.attendee.create({ + data: { + email: safePost.data.email, + name: safePost.data.name, + timeZone: safePost.data.timeZone, + booking: { connect: { id: safePost.data.bookingId } }, + }, + }); + const attendee = schemaAttendeeReadPublic.parse(data); + + if (attendee) { + res.status(201).json({ + attendee, + message: "Attendee created successfully", + }); + } else (error: Error) => res.status(400).json({ error }); + } + } else { + // @todo: check real availability times before booking + const data = await prisma.attendee.create({ data: { email: safePost.data.email, name: safePost.data.name, @@ -114,13 +140,7 @@ async function createOrlistAllAttendees( attendee, message: "Attendee created successfully", }); - } else { - (error: Error) => - res.status(400).json({ - message: "Could not create new attendee", - error, - }); - } + } else (error: Error) => res.status(400).json({ error }); } } else res.status(405).json({ message: `Method ${method} not allowed` }); } diff --git a/pages/api/availabilities/[id].ts b/pages/api/availabilities/[id].ts index 0b6a58c338..3dcbdbbca3 100644 --- a/pages/api/availabilities/[id].ts +++ b/pages/api/availabilities/[id].ts @@ -1,7 +1,6 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - +// // import prisma from "@calcom/prisma"; import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { AvailabilityResponse } from "@lib/types"; import { @@ -14,7 +13,7 @@ import { } from "@lib/validations/shared/queryIdTransformParseInt"; export async function availabilityById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdParseInt.safeParse(query); diff --git a/pages/api/availabilities/index.ts b/pages/api/availabilities/index.ts index bf17bd1ede..0e45564270 100644 --- a/pages/api/availabilities/index.ts +++ b/pages/api/availabilities/index.ts @@ -1,7 +1,6 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - +// import prisma from "@calcom/prisma"; import { withMiddleware } from "@lib/helpers/withMiddleware"; import { AvailabilityResponse, AvailabilitiesResponse } from "@lib/types"; import { @@ -10,7 +9,7 @@ import { } from "@lib/validations/availability"; async function createOrlistAllAvailabilities( - { method, body, userId }: NextApiRequest, + { method, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { if (method === "GET") { diff --git a/pages/api/booking-references/[id].ts b/pages/api/booking-references/[id].ts index f7a14056eb..17e444d717 100644 --- a/pages/api/booking-references/[id].ts +++ b/pages/api/booking-references/[id].ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { BookingReferenceResponse } from "@lib/types"; import { @@ -14,7 +12,7 @@ import { } from "@lib/validations/shared/queryIdTransformParseInt"; export async function bookingReferenceById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdParseInt.safeParse(query); @@ -64,7 +62,6 @@ export async function bookingReferenceById( .then((data) => schemaBookingReferenceReadPublic.parse(data)) .then((booking_reference) => res.status(200).json({ booking_reference })) .catch((error: Error) => { - console.log(error); res.status(404).json({ message: `BookingReference with id: ${safeQuery.data.id} not found`, error, diff --git a/pages/api/booking-references/index.ts b/pages/api/booking-references/index.ts index 58e45d5c9e..5c63a605b7 100644 --- a/pages/api/booking-references/index.ts +++ b/pages/api/booking-references/index.ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import { BookingReferenceResponse, BookingReferencesResponse } from "@lib/types"; import { @@ -10,7 +8,7 @@ import { } from "@lib/validations/booking-reference"; async function createOrlistAllBookingReferences( - { method, userId, body }: NextApiRequest, + { method, userId, body, prisma }: NextApiRequest, res: NextApiResponse ) { const userWithBookings = await prisma.user.findUnique({ diff --git a/pages/api/bookings/[id].ts b/pages/api/bookings/[id].ts index 7e17c9613a..68540fb69b 100644 --- a/pages/api/bookings/[id].ts +++ b/pages/api/bookings/[id].ts @@ -1,9 +1,9 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - +// import prisma from "@calcom/prisma"; import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { BookingResponse } from "@lib/types"; +import { isAdminGuard } from "@lib/utils/isAdmin"; import { schemaBookingEditBodyParams, schemaBookingReadPublic } from "@lib/validations/booking"; import { schemaQueryIdParseInt, @@ -11,7 +11,7 @@ import { } from "@lib/validations/shared/queryIdTransformParseInt"; export async function bookingById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdParseInt.safeParse(query); @@ -25,8 +25,11 @@ export async function bookingById( }); if (!userWithBookings) throw new Error("User not found"); const userBookingIds = userWithBookings.bookings.map((booking: { id: number }) => booking.id).flat(); - if (!userBookingIds.includes(safeQuery.data.id)) res.status(401).json({ message: "Unauthorized" }); - else { + const isAdmin = await isAdminGuard(userId); + + if (!isAdmin) { + if (!userBookingIds.includes(safeQuery.data.id)) res.status(401).json({ message: "Unauthorized" }); + } else { switch (method) { /** * @swagger diff --git a/pages/api/bookings/index.ts b/pages/api/bookings/index.ts index 40f24283ee..f1befaeb23 100644 --- a/pages/api/bookings/index.ts +++ b/pages/api/bookings/index.ts @@ -1,16 +1,16 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - +// import prisma from "@calcom/prisma"; import { withMiddleware } from "@lib/helpers/withMiddleware"; -import { BookingResponse, BookingsResponse } from "@lib/types"; +import type { BookingResponse, BookingsResponse } from "@lib/types"; +import { isAdminGuard } from "@lib/utils/isAdmin"; import { schemaBookingCreateBodyParams, schemaBookingReadPublic } from "@lib/validations/booking"; async function createOrlistAllBookings( - { method, body, userId }: NextApiRequest, + { method, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { - console.log("userIduserId", userId); + const isAdmin = await isAdminGuard(userId); if (method === "GET") { /** * @swagger @@ -28,15 +28,29 @@ async function createOrlistAllBookings( * 404: * description: No bookings were found */ - const data = await prisma.booking.findMany({ where: { userId } }); - const bookings = data.map((booking) => schemaBookingReadPublic.parse(booking)); - if (bookings) res.status(200).json({ bookings }); - else - (error: Error) => - res.status(404).json({ - message: "No Bookings were found", - error, - }); + if (!isAdmin) { + const data = await prisma.booking.findMany({ where: { userId } }); + const bookings = data.map((booking) => schemaBookingReadPublic.parse(booking)); + if (bookings) res.status(200).json({ bookings }); + else { + (error: Error) => + res.status(404).json({ + message: "No Bookings were found", + error, + }); + } + } else { + const data = await prisma.booking.findMany(); + const bookings = data.map((booking) => schemaBookingReadPublic.parse(booking)); + if (bookings) res.status(200).json({ bookings }); + else { + (error: Error) => + res.status(404).json({ + message: "No Bookings were found", + error, + }); + } + } } else if (method === "POST") { /** * @swagger @@ -77,19 +91,20 @@ async function createOrlistAllBookings( res.status(400).json({ message: "Bad request. Booking body is invalid." }); return; } - safe.data.userId = userId; - const data = await prisma.booking.create({ data: { ...safe.data } }); - const booking = schemaBookingReadPublic.parse(data); + if (!isAdmin) { + safe.data.userId = userId; + const data = await prisma.booking.create({ data: { ...safe.data } }); + const booking = schemaBookingReadPublic.parse(data); - if (booking) res.status(201).json({ booking, message: "Booking created successfully" }); - else - (error: Error) => { - console.log(error); - res.status(400).json({ - message: "Could not create new booking", - error, - }); - }; + if (booking) res.status(201).json({ booking, message: "Booking created successfully" }); + else (error: Error) => res.status(400).json({ error }); + } else { + const data = await prisma.booking.create({ data: { ...safe.data } }); + const booking = schemaBookingReadPublic.parse(data); + + if (booking) res.status(201).json({ booking, message: "Booking created successfully" }); + else (error: Error) => res.status(400).json({ error }); + } } else res.status(405).json({ message: `Method ${method} not allowed` }); } diff --git a/pages/api/custom-inputs/[id].ts b/pages/api/custom-inputs/[id].ts index 7423a10b99..5b778714ad 100644 --- a/pages/api/custom-inputs/[id].ts +++ b/pages/api/custom-inputs/[id].ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { EventTypeCustomInputResponse } from "@lib/types"; import { @@ -72,7 +70,7 @@ import { * description: Authorization information is missing or invalid. */ async function eventTypeById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdParseInt.safeParse(query); diff --git a/pages/api/custom-inputs/index.ts b/pages/api/custom-inputs/index.ts index e1c2d484ed..17500249aa 100644 --- a/pages/api/custom-inputs/index.ts +++ b/pages/api/custom-inputs/index.ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import { EventTypeCustomInputResponse, EventTypeCustomInputsResponse } from "@lib/types"; import { @@ -10,7 +8,7 @@ import { } from "@lib/validations/event-type-custom-input"; async function createOrlistAllEventTypeCustomInputs( - { userId, method, body }: NextApiRequest, + { userId, method, body, prisma }: NextApiRequest, res: NextApiResponse ) { const data = await prisma.eventType.findMany({ where: { userId } }); diff --git a/pages/api/destination-calendars/[id].ts b/pages/api/destination-calendars/[id].ts index 528b9e5f2d..307e2634ba 100644 --- a/pages/api/destination-calendars/[id].ts +++ b/pages/api/destination-calendars/[id].ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { DestinationCalendarResponse } from "@lib/types"; import { @@ -14,7 +12,7 @@ import { } from "@lib/validations/shared/queryIdTransformParseInt"; export async function destionationCalendarById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdParseInt.safeParse(query); diff --git a/pages/api/destination-calendars/index.ts b/pages/api/destination-calendars/index.ts index bfd7df6d89..5fced320d9 100644 --- a/pages/api/destination-calendars/index.ts +++ b/pages/api/destination-calendars/index.ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import { DestinationCalendarResponse, DestinationCalendarsResponse } from "@lib/types"; import { @@ -10,7 +8,7 @@ import { } from "@lib/validations/destination-calendar"; async function createOrlistAllDestinationCalendars( - { method, body, userId }: NextApiRequest, + { method, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { if (method === "GET") { diff --git a/pages/api/event-references/[id].ts b/pages/api/event-references/[id].ts index 7a72fea4c7..58bc27599d 100644 --- a/pages/api/event-references/[id].ts +++ b/pages/api/event-references/[id].ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { DailyEventReferenceResponse } from "@lib/types"; import { @@ -14,7 +12,7 @@ import { } from "@lib/validations/shared/queryIdTransformParseInt"; export async function dailyEventReferenceById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdParseInt.safeParse(query); diff --git a/pages/api/event-references/index.ts b/pages/api/event-references/index.ts index 48a438e321..449737cd06 100644 --- a/pages/api/event-references/index.ts +++ b/pages/api/event-references/index.ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import { DailyEventReferenceResponse, DailyEventReferencesResponse } from "@lib/types"; import { @@ -10,7 +8,7 @@ import { } from "@lib/validations/event-reference"; async function createOrlistAllDailyEventReferences( - { method, body, userId }: NextApiRequest, + { method, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const userBookings = await prisma.booking.findMany({ where: { userId } }); diff --git a/pages/api/event-types/[id].ts b/pages/api/event-types/[id].ts index 19435a0bc6..117ee7bf43 100644 --- a/pages/api/event-types/[id].ts +++ b/pages/api/event-types/[id].ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { EventTypeResponse } from "@lib/types"; import { isAdminGuard } from "@lib/utils/isAdmin"; @@ -12,7 +10,7 @@ import { } from "@lib/validations/shared/queryIdTransformParseInt"; export async function eventTypeById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const isAdmin = await isAdminGuard(userId); diff --git a/pages/api/event-types/index.ts b/pages/api/event-types/index.ts index bfe8c3e7ee..b7939bd0c7 100644 --- a/pages/api/event-types/index.ts +++ b/pages/api/event-types/index.ts @@ -1,14 +1,12 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; -import { EventTypeResponse, EventTypesResponse } from "@lib/types"; +import type { EventTypeResponse, EventTypesResponse } from "@lib/types"; import { isAdminGuard } from "@lib/utils/isAdmin"; import { schemaEventTypeCreateBodyParams, schemaEventTypeReadPublic } from "@lib/validations/event-type"; async function createOrlistAllEventTypes( - { method, body, userId }: NextApiRequest, + { method, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const isAdmin = await isAdminGuard(userId); diff --git a/pages/api/hooks/[id].ts b/pages/api/hooks/[id].ts index 32a81e7b12..e88761736c 100644 --- a/pages/api/hooks/[id].ts +++ b/pages/api/hooks/[id].ts @@ -1,14 +1,12 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { WebhookResponse } from "@lib/types"; import { schemaQueryIdAsString } from "@lib/validations/shared/queryIdString"; import { schemaWebhookEditBodyParams, schemaWebhookReadPublic } from "@lib/validations/webhook"; export async function WebhookById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdAsString.safeParse(query); diff --git a/pages/api/hooks/index.ts b/pages/api/hooks/index.ts index 422a30e419..3fb8380f4c 100644 --- a/pages/api/hooks/index.ts +++ b/pages/api/hooks/index.ts @@ -1,14 +1,12 @@ import type { NextApiRequest, NextApiResponse } from "next"; import { v4 as uuidv4 } from "uuid"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import { WebhookResponse, WebhooksResponse } from "@lib/types"; import { schemaWebhookCreateBodyParams } from "@lib/validations/webhook"; async function createOrlistAllWebhooks( - { method, body, userId }: NextApiRequest, + { method, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { if (method === "GET") { diff --git a/pages/api/memberships/[id].ts b/pages/api/memberships/[id].ts index ea99860d14..b6050ebbe9 100644 --- a/pages/api/memberships/[id].ts +++ b/pages/api/memberships/[id].ts @@ -1,14 +1,12 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { MembershipResponse } from "@lib/types"; import { schemaMembershipBodyParams, schemaMembershipPublic } from "@lib/validations/membership"; import { schemaQueryIdAsString, withValidQueryIdString } from "@lib/validations/shared/queryIdString"; export async function membershipById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdAsString.safeParse(query); diff --git a/pages/api/memberships/index.ts b/pages/api/memberships/index.ts index efd3fb278c..5aaa36f6db 100644 --- a/pages/api/memberships/index.ts +++ b/pages/api/memberships/index.ts @@ -1,13 +1,11 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import { MembershipResponse, MembershipsResponse } from "@lib/types"; import { schemaMembershipBodyParams, schemaMembershipPublic } from "@lib/validations/membership"; async function createOrlistAllMemberships( - { method, body, userId }: NextApiRequest, + { method, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { if (method === "GET") { diff --git a/pages/api/payments/[id].ts b/pages/api/payments/[id].ts index 99d515fe45..26f2138536 100644 --- a/pages/api/payments/[id].ts +++ b/pages/api/payments/[id].ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { PaymentResponse } from "@lib/types"; import { schemaPaymentPublic } from "@lib/validations/payment"; @@ -33,7 +31,7 @@ import { * description: Payment was not found */ export async function paymentById( - { method, query, userId }: NextApiRequest, + { method, query, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdParseInt.safeParse(query); diff --git a/pages/api/payments/index.ts b/pages/api/payments/index.ts index d758421f46..829d24681d 100644 --- a/pages/api/payments/index.ts +++ b/pages/api/payments/index.ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import { PaymentsResponse } from "@lib/types"; import { schemaPaymentPublic } from "@lib/validations/payment"; @@ -21,7 +19,7 @@ import { schemaPaymentPublic } from "@lib/validations/payment"; * 404: * description: No payments were found */ -async function allPayments({ userId }: NextApiRequest, res: NextApiResponse) { +async function allPayments({ userId, prisma }: NextApiRequest, res: NextApiResponse) { const userWithBookings = await prisma.user.findUnique({ where: { id: userId }, include: { bookings: true }, diff --git a/pages/api/schedules/[id].ts b/pages/api/schedules/[id].ts index 305cc5c51b..593f9d7846 100644 --- a/pages/api/schedules/[id].ts +++ b/pages/api/schedules/[id].ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { ScheduleResponse } from "@lib/types"; import { schemaScheduleBodyParams, schemaSchedulePublic } from "@lib/validations/schedule"; @@ -11,7 +9,7 @@ import { } from "@lib/validations/shared/queryIdTransformParseInt"; export async function scheduleById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdParseInt.safeParse(query); diff --git a/pages/api/schedules/index.ts b/pages/api/schedules/index.ts index 4421844047..81964f4030 100644 --- a/pages/api/schedules/index.ts +++ b/pages/api/schedules/index.ts @@ -1,13 +1,11 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import { ScheduleResponse, SchedulesResponse } from "@lib/types"; import { schemaScheduleBodyParams, schemaSchedulePublic } from "@lib/validations/schedule"; async function createOrlistAllSchedules( - { method, body, userId }: NextApiRequest, + { method, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { if (method === "GET") { diff --git a/pages/api/selected-calendars/[id].ts b/pages/api/selected-calendars/[id].ts index 88dca61806..ea2037fba3 100644 --- a/pages/api/selected-calendars/[id].ts +++ b/pages/api/selected-calendars/[id].ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { SelectedCalendarResponse } from "@lib/types"; import { @@ -11,7 +9,7 @@ import { import { schemaQueryIdAsString, withValidQueryIdString } from "@lib/validations/shared/queryIdString"; export async function selectedCalendarById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdAsString.safeParse(query); diff --git a/pages/api/selected-calendars/index.ts b/pages/api/selected-calendars/index.ts index f0021f9f0e..3ab69494a8 100644 --- a/pages/api/selected-calendars/index.ts +++ b/pages/api/selected-calendars/index.ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import { SelectedCalendarResponse, SelectedCalendarsResponse } from "@lib/types"; import { @@ -10,7 +8,7 @@ import { } from "@lib/validations/selected-calendar"; async function createOrlistAllSelectedCalendars( - { method, body, userId }: NextApiRequest, + { method, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { if (method === "GET") { diff --git a/pages/api/teams/[id].ts b/pages/api/teams/[id].ts index 2cfd371749..65dd8d116e 100644 --- a/pages/api/teams/[id].ts +++ b/pages/api/teams/[id].ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { TeamResponse } from "@lib/types"; import { @@ -72,7 +70,7 @@ import { schemaTeamBodyParams, schemaTeamPublic } from "@lib/validations/team"; * description: Authorization information is missing or invalid. */ export async function teamById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdParseInt.safeParse(query); diff --git a/pages/api/teams/index.ts b/pages/api/teams/index.ts index e5f870cef6..1dcc046f6e 100644 --- a/pages/api/teams/index.ts +++ b/pages/api/teams/index.ts @@ -1,14 +1,12 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import { TeamResponse, TeamsResponse } from "@lib/types"; import { schemaMembershipPublic } from "@lib/validations/membership"; import { schemaTeamBodyParams, schemaTeamPublic } from "@lib/validations/team"; async function createOrlistAllTeams( - { method, body, userId }: NextApiRequest, + { method, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { if (method === "GET") { diff --git a/pages/api/users/[id].ts b/pages/api/users/[id].ts index 65b864c652..276f015f9d 100644 --- a/pages/api/users/[id].ts +++ b/pages/api/users/[id].ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import type { UserResponse } from "@lib/types"; import { isAdminGuard } from "@lib/utils/isAdmin"; @@ -12,7 +10,7 @@ import { import { schemaUserEditBodyParams, schemaUserReadPublic } from "@lib/validations/user"; export async function userById( - { method, query, body, userId }: NextApiRequest, + { method, query, body, userId, prisma }: NextApiRequest, res: NextApiResponse ) { const safeQuery = schemaQueryIdParseInt.safeParse(query); diff --git a/pages/api/users/index.ts b/pages/api/users/index.ts index 3839ae21b6..cbb0eab69a 100644 --- a/pages/api/users/index.ts +++ b/pages/api/users/index.ts @@ -1,7 +1,5 @@ import type { NextApiRequest, NextApiResponse } from "next"; -import prisma from "@calcom/prisma"; - import { withMiddleware } from "@lib/helpers/withMiddleware"; import { UserResponse, UsersResponse } from "@lib/types"; import { isAdminGuard } from "@lib/utils/isAdmin"; @@ -24,7 +22,7 @@ import { schemaUserReadPublic, schemaUserCreateBodyParams } from "@lib/validatio * description: No users were found */ async function getAllorCreateUser( - { userId, method, body }: NextApiRequest, + { userId, method, body, prisma }: NextApiRequest, res: NextApiResponse ) { const isAdmin = await isAdminGuard(userId);