first-update

This commit is contained in:
2026-03-17 14:36:31 +08:00
parent 72f08aee7c
commit 4eddf05e79
516 changed files with 115270 additions and 1 deletions

View File

@@ -0,0 +1,110 @@
import { NextResponse } from 'next/server';
import templateDb from '@/lib/db/questionTemplates';
import { generateQuestionsFromTemplateEdit } from '@/lib/services/questions/template';
// 获取单个模板
export async function GET(request, { params }) {
try {
const { templateId } = params;
const template = await templateDb.getTemplateById(templateId);
if (!template) {
return NextResponse.json({ error: '模板不存在' }, { status: 404 });
}
// 获取使用统计
const usageCount = await templateDb.getTemplateUsageCount(templateId);
return NextResponse.json({
success: true,
template: {
...template,
usageCount
}
});
} catch (error) {
console.error('Failed to get template:', error);
return NextResponse.json({ error: error.message || 'Failed to get template' }, { status: 500 });
}
}
// 更新问题模板
export async function PUT(request, { params }) {
try {
const { projectId, templateId } = params;
const data = await request.json();
const { question, sourceType, answerType, description, labels, customFormat, order, autoGenerate } = data;
// 验证数据源类型
if (sourceType && !['image', 'text'].includes(sourceType)) {
return NextResponse.json({ error: '无效的数据源类型' }, { status: 400 });
}
// 验证答案类型
if (answerType && !['text', 'label', 'custom_format'].includes(answerType)) {
return NextResponse.json({ error: '无效的答案类型' }, { status: 400 });
}
const updateData = {};
if (question !== undefined) updateData.question = question;
if (sourceType !== undefined) updateData.sourceType = sourceType;
if (answerType !== undefined) updateData.answerType = answerType;
if (description !== undefined) updateData.description = description;
if (labels !== undefined) updateData.labels = labels;
if (customFormat !== undefined) updateData.customFormat = customFormat;
if (order !== undefined) updateData.order = order;
const template = await templateDb.updateTemplate(templateId, updateData);
let generationResult = null;
// 如果启用自动生成,则为还未创建此模板问题的数据源创建问题
if (autoGenerate) {
try {
generationResult = await generateQuestionsFromTemplateEdit(projectId, template);
} catch (error) {
console.error('编辑模式自动生成问题失败:', error);
generationResult = {
success: false,
successCount: 0,
failCount: 0,
message: '自动生成问题时发生错误'
};
}
}
return NextResponse.json({
success: true,
template,
generation: generationResult
});
} catch (error) {
console.error('Failed to update template:', error);
return NextResponse.json({ error: error.message || 'Failed to update template' }, { status: 500 });
}
}
// 删除问题模板
export async function DELETE(request, { params }) {
try {
const { templateId } = params;
// 检查是否有关联的问题
const usageCount = await templateDb.getTemplateUsageCount(templateId);
if (usageCount > 0) {
return NextResponse.json({ error: `此模板已被 ${usageCount} 个问题使用,无法删除` }, { status: 400 });
}
await templateDb.deleteTemplate(templateId);
return NextResponse.json({
success: true,
message: '模板删除成功'
});
} catch (error) {
console.error('Failed to delete template:', error);
return NextResponse.json({ error: error.message || 'Failed to delete template' }, { status: 500 });
}
}