import { NextRequest, NextResponse } from 'next/server' import prisma from '@/lib/prisma' import { auth } from '@/auth' import { revalidatePath } from 'next/cache' const DEFAULT_COLORS = ['#3B82F6', '#8B5CF6', '#EC4899', '#F59E0B', '#10B981', '#06B6D4'] const DEFAULT_ICONS = ['📁', '📚', '💼', '🎯', '📊', '🎨', '💡', '🔧'] // GET /api/notebooks - Get all notebooks for current user export async function GET(request: NextRequest) { const session = await auth() if (!session?.user?.id) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } try { const notebooks = await prisma.notebook.findMany({ where: { userId: session.user.id }, include: { labels: { orderBy: { name: 'asc' } }, _count: { select: { notes: true } } }, orderBy: { order: 'asc' } }) return NextResponse.json({ success: true, notebooks: notebooks.map(nb => ({ ...nb, notesCount: nb._count.notes })) }) } catch (error) { return NextResponse.json( { success: false, error: 'Failed to fetch notebooks' }, { status: 500 } ) } } // POST /api/notebooks - Create a new notebook export async function POST(request: NextRequest) { const session = await auth() if (!session?.user?.id) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } try { const body = await request.json() const { name, icon, color } = body if (!name || typeof name !== 'string') { return NextResponse.json( { success: false, error: 'Notebook name is required' }, { status: 400 } ) } // Get the highest order value for this user const highestOrder = await prisma.notebook.findFirst({ where: { userId: session.user.id }, orderBy: { order: 'desc' }, select: { order: true } }) const nextOrder = (highestOrder?.order ?? -1) + 1 // Create notebook const notebook = await prisma.notebook.create({ data: { name: name.trim(), icon: icon || DEFAULT_ICONS[Math.floor(Math.random() * DEFAULT_ICONS.length)], color: color || DEFAULT_COLORS[Math.floor(Math.random() * DEFAULT_COLORS.length)], order: nextOrder, userId: session.user.id }, include: { labels: true, _count: { select: { notes: true } } } }) revalidatePath('/') return NextResponse.json({ success: true, ...notebook, notesCount: notebook._count.notes }, { status: 201 }) } catch (error) { return NextResponse.json( { success: false, error: 'Failed to create notebook' }, { status: 500 } ) } }