2021-11-10 11:16:32 +00:00
|
|
|
import { Availability } from "@prisma/client";
|
2021-09-02 12:13:19 +00:00
|
|
|
import type { NextApiRequest, NextApiResponse } from "next";
|
2021-09-22 19:52:38 +00:00
|
|
|
|
2021-09-03 20:51:21 +00:00
|
|
|
import { getSession } from "@lib/auth";
|
2021-09-02 12:13:19 +00:00
|
|
|
import prisma from "@lib/prisma";
|
2021-11-10 11:16:32 +00:00
|
|
|
import { TimeRange } from "@lib/types/schedule";
|
2021-09-02 12:13:19 +00:00
|
|
|
|
|
|
|
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
|
|
|
const session = await getSession({ req: req });
|
2021-11-10 11:16:32 +00:00
|
|
|
const userId = session?.user?.id;
|
|
|
|
if (!userId) {
|
2021-09-02 12:13:19 +00:00
|
|
|
res.status(401).json({ message: "Not authenticated" });
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-11-10 11:16:32 +00:00
|
|
|
if (!req.body.schedule || req.body.schedule.length !== 7) {
|
|
|
|
return res.status(400).json({ message: "Bad Request." });
|
|
|
|
}
|
|
|
|
|
|
|
|
const availability = req.body.schedule.reduce(
|
|
|
|
(availability: Availability[], times: TimeRange[], day: number) => {
|
|
|
|
const addNewTime = (time: TimeRange) =>
|
|
|
|
({
|
|
|
|
days: [day],
|
|
|
|
startTime: time.start,
|
|
|
|
endTime: time.end,
|
|
|
|
} as Availability);
|
|
|
|
|
|
|
|
const filteredTimes = times.filter((time) => {
|
|
|
|
let idx;
|
|
|
|
if (
|
|
|
|
(idx = availability.findIndex(
|
|
|
|
(schedule) => schedule.startTime === time.start && schedule.endTime === time.end
|
|
|
|
)) !== -1
|
|
|
|
) {
|
|
|
|
availability[idx].days.push(day);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
});
|
|
|
|
filteredTimes.forEach((time) => {
|
|
|
|
availability.push(addNewTime(time));
|
|
|
|
});
|
|
|
|
return availability;
|
|
|
|
},
|
|
|
|
[] as Availability[]
|
|
|
|
);
|
|
|
|
|
2021-09-02 12:13:19 +00:00
|
|
|
if (req.method === "POST") {
|
|
|
|
try {
|
2021-11-10 11:16:32 +00:00
|
|
|
await prisma.availability.deleteMany({
|
|
|
|
where: {
|
|
|
|
userId,
|
2021-09-02 12:13:19 +00:00
|
|
|
},
|
|
|
|
});
|
2021-11-10 11:16:32 +00:00
|
|
|
await Promise.all(
|
|
|
|
availability.map((schedule: Availability) =>
|
|
|
|
prisma.availability.create({
|
|
|
|
data: {
|
|
|
|
days: schedule.days,
|
|
|
|
startTime: schedule.startTime,
|
|
|
|
endTime: schedule.endTime,
|
|
|
|
user: {
|
|
|
|
connect: {
|
|
|
|
id: userId,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
})
|
|
|
|
)
|
|
|
|
);
|
2021-09-02 12:13:19 +00:00
|
|
|
return res.status(200).json({
|
|
|
|
message: "created",
|
|
|
|
});
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error);
|
|
|
|
return res.status(500).json({ message: "Unable to create schedule." });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|