import { NextResponse } from "next/server"; import { getServerSession } from "next-auth/next"; import { authOptions } from "@/app/api/auth/[...nextauth]/route"; import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); // GET events export async function GET(req: Request) { try { const session = await getServerSession(authOptions); if (!session) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const { searchParams } = new URL(req.url); const start = searchParams.get("start"); const end = searchParams.get("end"); const events = await prisma.event.findMany({ where: { userId: session.user.id, ...(start && end ? { start: { gte: new Date(start), }, end: { lte: new Date(end), }, } : {}), }, orderBy: { start: "asc", }, }); return NextResponse.json(events); } catch (error) { console.error("Error fetching events:", error); return NextResponse.json( { error: "Error fetching events" }, { status: 500 } ); } } // POST new event export async function POST(req: Request) { try { const session = await getServerSession(authOptions); if (!session) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const body = await req.json(); const event = await prisma.event.create({ data: { ...body, userId: session.user.id, }, }); return NextResponse.json(event); } catch (error) { console.error("Error creating event:", error); return NextResponse.json( { error: "Error creating event" }, { status: 500 } ); } } // PUT update event export async function PUT(req: Request) { try { const session = await getServerSession(authOptions); if (!session) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const body = await req.json(); const { id, ...data } = body; const event = await prisma.event.update({ where: { id, }, data, }); return NextResponse.json(event); } catch (error) { console.error("Error updating event:", error); return NextResponse.json( { error: "Error updating event" }, { status: 500 } ); } } // DELETE event export async function DELETE(req: Request) { try { const session = await getServerSession(authOptions); if (!session) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const { searchParams } = new URL(req.url); const id = searchParams.get("id"); if (!id) { return NextResponse.json( { error: "Event ID is required" }, { status: 400 } ); } await prisma.event.delete({ where: { id, }, }); return NextResponse.json({ success: true }); } catch (error) { console.error("Error deleting event:", error); return NextResponse.json( { error: "Error deleting event" }, { status: 500 } ); } }