Relevant API route.ts:
import { NextResponse } from "next/server";
import { auth } from "@/auth";
import prisma from "@/prisma";
import { isStaff } from "@/lib/Staff";
export async function GET() {
try {
const now = new Date();
const shows = await prisma.show.findMany({
where: {
startTime: { gt: now },
},
orderBy: { startTime: "asc" },
include: { host: true },
});
return NextResponse.json(shows);
} catch (error) {
console.error("Error fetching shows:", error);
return NextResponse.error();
}
}
export async function POST(req: Request) {
const session = await auth();
if (!session || !session.user?.id) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
if (!isStaff(session.user.id)) {
return NextResponse.json({ error: "Forbidden" }, { status: 403 });
}
try {
const formData = await req.formData();
const name = formData.get("name");
const hostId = formData.get("hostId");
const startTime = formData.get("startTime");
const endTime = formData.get("endTime");
if (!name || !hostId || !startTime || !endTime) {
return NextResponse.json({ error: "All fields are required." }, { status: 400 });
}
const start = new Date(startTime.toString());
const end = new Date(endTime.toString());
if (isNaN(start.getTime()) || isNaN(end.getTime())) {
return NextResponse.json({ error: "Invalid date format." }, { status: 400 });
}
if (start >= end) {
return NextResponse.json({ error: "Start time must be before end time." }, { status: 400 });
}
const show = await prisma.show.create({
data: {
name: name.toString(),
startTime: start,
endTime: end,
host: {
connect: { id: hostId.toString() },
},
},
include: { host: true },
});
return NextResponse.json(show);
} catch (error) {
console.error("Error creating show:", error);
return NextResponse.json({ error: "Failed to create show." }, { status: 500 });
}
}```