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

111 lines
3.3 KiB
JavaScript
Raw Normal View History

2026-03-17 14:36:31 +08:00
import { NextResponse } from 'next/server';
import {
getAllQuestionsByProjectId,
getQuestions,
getQuestionsIds,
saveQuestions,
updateQuestion
} from '@/lib/db/questions';
import { getImageById, getImageChunk } from '@/lib/db/images';
// 获取项目的所有问题
export async function GET(request, { params }) {
try {
const { projectId } = params;
// 验证项目ID
if (!projectId) {
return NextResponse.json({ error: 'Missing project ID' }, { status: 400 });
}
const { searchParams } = new URL(request.url);
let status = searchParams.get('status');
let answered = undefined;
if (status === 'answered') answered = true;
if (status === 'unanswered') answered = false;
const chunkName = searchParams.get('chunkName');
const sourceType = searchParams.get('sourceType') || 'all'; // 'all', 'text', 'image'
const searchMatchMode = searchParams.get('searchMatchMode') || 'match'; // 'match', 'notMatch'
let selectedAll = searchParams.get('selectedAll');
if (selectedAll) {
let data = await getQuestionsIds(
projectId,
answered,
searchParams.get('input'),
chunkName,
sourceType,
searchMatchMode
);
return NextResponse.json(data);
}
let all = searchParams.get('all');
if (all) {
let data = await getAllQuestionsByProjectId(projectId);
return NextResponse.json(data);
}
// 获取问题列表
const questions = await getQuestions(
projectId,
parseInt(searchParams.get('page')),
parseInt(searchParams.get('size')),
answered,
searchParams.get('input'),
chunkName,
sourceType,
searchMatchMode
);
return NextResponse.json(questions);
} catch (error) {
console.error('Failed to get questions:', String(error));
return NextResponse.json({ error: error.message || 'Failed to get questions' }, { status: 500 });
}
}
// 新增问题
export async function POST(request, { params }) {
try {
const { projectId } = params;
const body = await request.json();
const { question, chunkId, label } = body;
// 验证必要参数
if (!projectId || !question) {
return NextResponse.json({ error: 'Missing necessary parameters' }, { status: 400 });
}
if (!body.chunkId && body.imageId) {
const chunk = await getImageChunk(projectId);
body.chunkId = chunk.id;
body.label = 'image';
}
// 添加新问题
let questions = [body];
// 保存更新后的数据
let data = await saveQuestions(projectId, questions);
// 返回成功响应
return NextResponse.json(data);
} catch (error) {
console.error('Failed to create question:', String(error));
return NextResponse.json({ error: error.message || 'Failed to create question' }, { status: 500 });
}
}
// 更新问题
export async function PUT(request) {
try {
const body = await request.json();
// 保存更新后的数据
const { imageId } = body;
if (imageId) {
body.imageName = (await getImageById(imageId))?.imageName;
}
let data = await updateQuestion(body);
// 返回更新后的问题数据
return NextResponse.json(data);
} catch (error) {
console.error('更新问题失败:', String(error));
return NextResponse.json({ error: error.message || '更新问题失败' }, { status: 500 });
}
}