first-update
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
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'
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user