Files
YG-Datasets/easy-dataset-main/app/api/projects/[projectId]/eval-datasets/[evalId]/route.js

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 });
}
}