59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
import { HttpError } from "@/../../packages/lib/http-error";
|
|
import type { NextApiRequest } from "next";
|
|
|
|
import { DEFAULT_SCHEDULE, getAvailabilityFromSchedule } from "@calcom/lib/availability";
|
|
import { defaultResponder } from "@calcom/lib/server";
|
|
|
|
import { schemaCreateScheduleBodyParams, schemaSchedulePublic } from "@lib/validations/schedule";
|
|
|
|
/**
|
|
* @swagger
|
|
* /schedules:
|
|
* post:
|
|
* operationId: addSchedule
|
|
* summary: Creates a new schedule
|
|
* tags:
|
|
* - schedules
|
|
* responses:
|
|
* 201:
|
|
* description: OK, schedule created
|
|
* 400:
|
|
* description: Bad request. Schedule body is invalid.
|
|
* 401:
|
|
* description: Authorization information is missing or invalid.
|
|
*/
|
|
async function postHandler({ body, userId, isAdmin, prisma }: NextApiRequest) {
|
|
const parsedBody = schemaCreateScheduleBodyParams.parse(body);
|
|
if (parsedBody.userId && !isAdmin) {
|
|
throw new HttpError({ statusCode: 403 });
|
|
}
|
|
|
|
const data = await prisma.schedule.create({
|
|
data: {
|
|
...parsedBody,
|
|
userId: parsedBody.userId || userId,
|
|
availability: {
|
|
createMany: {
|
|
data: getAvailabilityFromSchedule(DEFAULT_SCHEDULE).map((schedule) => ({
|
|
days: schedule.days,
|
|
startTime: schedule.startTime,
|
|
endTime: schedule.endTime,
|
|
})),
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
const createSchedule = schemaSchedulePublic.safeParse(data);
|
|
if (!createSchedule.success) {
|
|
throw new HttpError({ statusCode: 400, message: "Could not create new schedule" });
|
|
}
|
|
|
|
return {
|
|
schedule: createSchedule.data,
|
|
message: "Schedule created succesfully",
|
|
};
|
|
}
|
|
|
|
export default defaultResponder(postHandler);
|