rafmacalaba's picture
feat: human validation, recursive highlighting, data mentions rename
da957b0
import { saveAnnotation, deleteAnnotation, updateAnnotation } from '../../../utils/storage.js';
import { NextResponse } from 'next/server';
export async function POST(request) {
try {
const body = await request.json();
const {
dataset_name,
dataset_tag,
document_index,
page_number,
} = body;
if (
document_index === undefined || document_index === null ||
page_number === undefined ||
!dataset_name?.text ||
!dataset_tag
) {
return NextResponse.json(
{ error: 'Missing required fields: dataset_name.text, dataset_tag, document_index, page_number' },
{ status: 400 }
);
}
await saveAnnotation(body);
return NextResponse.json({ success: true });
} catch (error) {
console.error('Annotation error:', error);
return NextResponse.json({ error: 'Failed to save annotation: ' + error.message }, { status: 500 });
}
}
export async function DELETE(request) {
try {
const { searchParams } = new URL(request.url);
const timestamp = searchParams.get('timestamp');
const docIndex = parseInt(searchParams.get('doc'), 10);
const pageNumber = parseInt(searchParams.get('page'), 10);
if (!timestamp || isNaN(docIndex) || isNaN(pageNumber)) {
return NextResponse.json(
{ error: 'Missing timestamp, doc, or page parameter' },
{ status: 400 }
);
}
const deleted = await deleteAnnotation(timestamp, docIndex, pageNumber);
if (deleted) {
return NextResponse.json({ success: true });
}
return NextResponse.json({ error: 'Annotation not found' }, { status: 404 });
} catch (error) {
console.error('Delete annotation error:', error);
return NextResponse.json({ error: 'Failed to delete annotation: ' + error.message }, { status: 500 });
}
}
export async function PUT(request) {
try {
const body = await request.json();
const { timestamp, document_index, page_number, updates } = body;
if (!timestamp || document_index === undefined || page_number === undefined || !updates) {
return NextResponse.json(
{ error: 'Missing timestamp, document_index, page_number, or updates' },
{ status: 400 }
);
}
const updated = await updateAnnotation(timestamp, document_index, page_number, updates);
if (updated) {
return NextResponse.json({ success: true, annotation: updated });
}
return NextResponse.json({ error: 'Annotation not found' }, { status: 404 });
} catch (error) {
console.error('Update annotation error:', error);
return NextResponse.json({ error: 'Failed to update annotation: ' + error.message }, { status: 500 });
}
}