import { NextRequest, NextResponse } from 'next/server' import { auth } from '@/auth' import { autoLabelCreationService } from '@/lib/ai/services' /** * POST /api/ai/auto-labels - Suggest new labels for a notebook */ export async function POST(request: NextRequest) { try { const session = await auth() if (!session?.user?.id) { return NextResponse.json( { success: false, error: 'Unauthorized' }, { status: 401 } ) } const body = await request.json() const { notebookId } = body if (!notebookId || typeof notebookId !== 'string') { return NextResponse.json( { success: false, error: 'Missing required field: notebookId' }, { status: 400 } ) } // Check if notebook belongs to user const { prisma } = await import('@/lib/prisma') const notebook = await prisma.notebook.findFirst({ where: { id: notebookId, userId: session.user.id, }, }) if (!notebook) { return NextResponse.json( { success: false, error: 'Notebook not found' }, { status: 404 } ) } // Get label suggestions const suggestions = await autoLabelCreationService.suggestLabels( notebookId, session.user.id ) if (!suggestions) { return NextResponse.json({ success: true, data: null, message: 'No suggestions available (notebook may have fewer than 15 notes)', }) } return NextResponse.json({ success: true, data: suggestions, }) } catch (error) { return NextResponse.json( { success: false, error: error instanceof Error ? error.message : 'Failed to get label suggestions', }, { status: 500 } ) } } /** * PUT /api/ai/auto-labels - Create suggested labels */ export async function PUT(request: NextRequest) { try { const session = await auth() if (!session?.user?.id) { return NextResponse.json( { success: false, error: 'Unauthorized' }, { status: 401 } ) } const body = await request.json() const { suggestions, selectedLabels } = body if (!suggestions || !Array.isArray(selectedLabels)) { return NextResponse.json( { success: false, error: 'Missing required fields: suggestions, selectedLabels' }, { status: 400 } ) } // Create labels const createdCount = await autoLabelCreationService.createLabels( suggestions.notebookId, session.user.id, suggestions, selectedLabels ) return NextResponse.json({ success: true, data: { createdCount, }, }) } catch (error) { return NextResponse.json( { success: false, error: error instanceof Error ? error.message : 'Failed to create labels', }, { status: 500 } ) } }