import { NextRequest, NextResponse } from 'next/server' import prisma from '@/lib/prisma' import { auth } from '@/auth' import { parseNote } from '@/lib/utils' // GET /api/notes/[id] - Get a single note export async function GET( request: NextRequest, { params }: { params: Promise<{ id: string }> } ) { const session = await auth() if (!session?.user?.id) { return NextResponse.json( { success: false, error: 'Unauthorized' }, { status: 401 } ) } try { const { id } = await params const note = await prisma.note.findUnique({ where: { id } }) if (!note) { return NextResponse.json( { success: false, error: 'Note not found' }, { status: 404 } ) } if (note.userId !== session.user.id) { return NextResponse.json( { success: false, error: 'Forbidden' }, { status: 403 } ) } return NextResponse.json({ success: true, data: parseNote(note) }) } catch (error) { console.error('Error fetching note:', error) return NextResponse.json( { success: false, error: 'Failed to fetch note' }, { status: 500 } ) } } // PUT /api/notes/[id] - Update a note export async function PUT( request: NextRequest, { params }: { params: Promise<{ id: string }> } ) { const session = await auth() if (!session?.user?.id) { return NextResponse.json( { success: false, error: 'Unauthorized' }, { status: 401 } ) } try { const { id } = await params const existingNote = await prisma.note.findUnique({ where: { id } }) if (!existingNote) { return NextResponse.json( { success: false, error: 'Note not found' }, { status: 404 } ) } if (existingNote.userId !== session.user.id) { return NextResponse.json( { success: false, error: 'Forbidden' }, { status: 403 } ) } const body = await request.json() const updateData: any = { ...body } if ('checkItems' in body) { updateData.checkItems = body.checkItems ?? null } if ('labels' in body) { updateData.labels = body.labels ?? null } updateData.updatedAt = new Date() const note = await prisma.note.update({ where: { id }, data: updateData }) return NextResponse.json({ success: true, data: parseNote(note) }) } catch (error) { console.error('Error updating note:', error) return NextResponse.json( { success: false, error: 'Failed to update note' }, { status: 500 } ) } } // DELETE /api/notes/[id] - Delete a note export async function DELETE( request: NextRequest, { params }: { params: Promise<{ id: string }> } ) { const session = await auth() if (!session?.user?.id) { return NextResponse.json( { success: false, error: 'Unauthorized' }, { status: 401 } ) } try { const { id } = await params const existingNote = await prisma.note.findUnique({ where: { id } }) if (!existingNote) { return NextResponse.json( { success: false, error: 'Note not found' }, { status: 404 } ) } if (existingNote.userId !== session.user.id) { return NextResponse.json( { success: false, error: 'Forbidden' }, { status: 403 } ) } await prisma.note.delete({ where: { id } }) return NextResponse.json({ success: true, message: 'Note deleted successfully' }) } catch (error) { console.error('Error deleting note:', error) return NextResponse.json( { success: false, error: 'Failed to delete note' }, { status: 500 } ) } }