109 lines
3.1 KiB
JavaScript
109 lines
3.1 KiB
JavaScript
import { NextResponse } from 'next/server';
|
|
import { getEvalQuestionById, updateEvalQuestion, deleteEvalQuestion } from '@/lib/db/evalDatasets';
|
|
import { db } from '@/lib/db/index';
|
|
|
|
/**
|
|
* Get evaluation dataset details by ID
|
|
* Supports operateType=prev|next to navigate neighbors
|
|
*/
|
|
export async function GET(request, { params }) {
|
|
try {
|
|
const { projectId, evalId } = params;
|
|
const { searchParams } = new URL(request.url);
|
|
const operateType = searchParams.get('operateType');
|
|
|
|
// Navigation request (prev/next)
|
|
if (operateType) {
|
|
const current = await db.evalDatasets.findUnique({
|
|
where: { id: evalId },
|
|
select: { createAt: true }
|
|
});
|
|
|
|
if (!current) {
|
|
return NextResponse.json(null);
|
|
}
|
|
|
|
let neighbor = null;
|
|
|
|
if (operateType === 'prev') {
|
|
// Get previous item (newer createAt when list is sorted desc)
|
|
neighbor = await db.evalDatasets.findFirst({
|
|
where: {
|
|
projectId,
|
|
createAt: { gt: current.createAt }
|
|
},
|
|
orderBy: { createAt: 'asc' },
|
|
select: { id: true }
|
|
});
|
|
} else if (operateType === 'next') {
|
|
// Get next item (older createAt)
|
|
neighbor = await db.evalDatasets.findFirst({
|
|
where: {
|
|
projectId,
|
|
createAt: { lt: current.createAt }
|
|
},
|
|
orderBy: { createAt: 'desc' },
|
|
select: { id: true }
|
|
});
|
|
}
|
|
|
|
return NextResponse.json(neighbor || null);
|
|
}
|
|
|
|
// Regular detail request
|
|
const evalQuestion = await getEvalQuestionById(evalId);
|
|
|
|
if (!evalQuestion) {
|
|
return NextResponse.json({ error: 'Eval question not found' }, { status: 404 });
|
|
}
|
|
|
|
return NextResponse.json(evalQuestion);
|
|
} catch (error) {
|
|
console.error('Failed to get eval question:', error);
|
|
return NextResponse.json({ error: error.message || 'Failed to get eval question' }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Update evaluation dataset
|
|
*/
|
|
export async function PUT(request, { params }) {
|
|
try {
|
|
const { evalId } = params;
|
|
const data = await request.json();
|
|
|
|
// Only allow specific fields
|
|
const allowedFields = ['question', 'options', 'correctAnswer', 'tags', 'note'];
|
|
const updateData = {};
|
|
|
|
for (const field of allowedFields) {
|
|
if (data[field] !== undefined) {
|
|
updateData[field] = data[field];
|
|
}
|
|
}
|
|
|
|
const updated = await updateEvalQuestion(evalId, updateData);
|
|
|
|
return NextResponse.json(updated);
|
|
} catch (error) {
|
|
console.error('Failed to update eval question:', error);
|
|
return NextResponse.json({ error: error.message || 'Failed to update eval question' }, { status: 500 });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Delete evaluation dataset
|
|
*/
|
|
export async function DELETE(request, { params }) {
|
|
try {
|
|
const { evalId } = params;
|
|
|
|
await deleteEvalQuestion(evalId);
|
|
|
|
return NextResponse.json({ success: true });
|
|
} catch (error) {
|
|
console.error('Failed to delete eval question:', error);
|
|
return NextResponse.json({ error: error.message || 'Failed to delete eval question' }, { status: 500 });
|
|
}
|
|
}
|