Files

101 lines
2.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { NextResponse } from 'next/server';
export async function POST(request, { params }) {
try {
const { projectId } = params;
const body = await request.json();
const { format, selectedIds, filters } = body;
let questions;
// 如果有选中的问题 ID按 ID 获取
if (selectedIds && selectedIds.length > 0) {
questions = await getQuestionsByIds(projectId, selectedIds);
} else {
// 否则获取全部问题(不限分页)
questions = await getAllQuestions(
projectId,
filters?.searchTerm || '',
filters?.chunkName || '',
filters?.sourceType || 'all'
);
}
// 固定导出字段:问题内容、文本块名称、问题标签
const filteredQuestions = questions.map(q => ({
question: q.question,
chunkName: q.chunk?.name || q.chunkName || '',
questionLabel: q.questionLabel || ''
}));
return NextResponse.json(filteredQuestions);
} catch (error) {
console.error('Failed to export questions:', error);
return NextResponse.json({ error: error.message }, { status: 500 });
}
}
// 获取全部问题(不限分页)
async function getAllQuestions(projectId, searchTerm = '', chunkName = '', sourceType = 'all') {
const { db } = await import('@/lib/db/index');
const whereClause = {
projectId
};
// 搜索条件
if (searchTerm) {
whereClause.OR = [{ question: { contains: searchTerm } }, { questionLabel: { contains: searchTerm } }];
}
// 文本块名称筛选
if (chunkName) {
whereClause.chunk = {
name: { contains: chunkName }
};
}
// 数据源类型筛选
if (sourceType === 'text') {
whereClause.imageName = null;
} else if (sourceType === 'image') {
whereClause.imageName = { not: null };
}
return await db.questions.findMany({
where: whereClause,
include: {
chunk: {
select: {
name: true
}
}
},
orderBy: {
createAt: 'desc'
}
});
}
// 根据 ID 列表获取问题
async function getQuestionsByIds(projectId, questionIds) {
const { db } = await import('@/lib/db/index');
return await db.questions.findMany({
where: {
projectId,
id: { in: questionIds }
},
include: {
chunk: {
select: {
name: true
}
}
},
orderBy: {
createAt: 'desc'
}
});
}