65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
import { NextResponse } from 'next/server';
|
|
import { db } from '@/lib/db/index';
|
|
|
|
/**
|
|
* Get current question info (including random swap info)
|
|
*/
|
|
export async function GET(request, { params }) {
|
|
const { projectId, taskId } = params;
|
|
|
|
try {
|
|
if (!projectId || !taskId) {
|
|
return NextResponse.json({ error: 'Missing required parameters' }, { status: 400 });
|
|
}
|
|
|
|
// Fetch task
|
|
const task = await db.task.findUnique({
|
|
where: { id: taskId }
|
|
});
|
|
|
|
if (!task || task.taskType !== 'blind-test') {
|
|
return NextResponse.json({ error: 'Task not found' }, { status: 404 });
|
|
}
|
|
|
|
// Parse task detail
|
|
const detail = JSON.parse(task.detail || '{}');
|
|
// Support both evalDatasetIds and questionIds
|
|
const questionIds = detail.questionIds || detail.evalDatasetIds || [];
|
|
const currentIndex = detail.currentIndex || 0;
|
|
|
|
// Check if task is completed
|
|
if (questionIds.length === 0 || currentIndex >= questionIds.length) {
|
|
return NextResponse.json({
|
|
completed: true,
|
|
currentIndex,
|
|
totalQuestions: questionIds.length
|
|
});
|
|
}
|
|
|
|
// Fetch current question
|
|
const currentQuestionId = questionIds[currentIndex];
|
|
const currentQuestion = await db.evalDatasets.findUnique({
|
|
where: { id: currentQuestionId }
|
|
});
|
|
|
|
if (!currentQuestion) {
|
|
return NextResponse.json({ error: 'Question not found' }, { status: 404 });
|
|
}
|
|
|
|
// Randomly decide whether to swap (core blind-test behavior)
|
|
const isSwapped = Math.random() > 0.5;
|
|
|
|
return NextResponse.json({
|
|
questionId: currentQuestion.id,
|
|
question: currentQuestion.question,
|
|
answer: currentQuestion.correctAnswer || '',
|
|
questionIndex: currentIndex + 1,
|
|
totalQuestions: questionIds.length,
|
|
isSwapped
|
|
});
|
|
} catch (error) {
|
|
console.error('Failed to fetch question info:', error);
|
|
return NextResponse.json({ error: error.message }, { status: 500 });
|
|
}
|
|
}
|