first-update
This commit is contained in:
@@ -0,0 +1,176 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { getUploadFileInfoById } from '@/lib/db/upload-files';
|
||||
import { createGaPairs, getGaPairsByFileId } from '@/lib/db/ga-pairs';
|
||||
|
||||
/**
|
||||
* 批量手动添加 GA 对到多个文件
|
||||
*/
|
||||
export async function POST(request, { params }) {
|
||||
try {
|
||||
const { projectId } = params;
|
||||
const body = await request.json();
|
||||
|
||||
if (!projectId) {
|
||||
return NextResponse.json({ error: 'Project ID is required' }, { status: 400 });
|
||||
}
|
||||
|
||||
const { fileIds, gaPair, appendMode = false } = body;
|
||||
|
||||
if (!fileIds || !Array.isArray(fileIds) || fileIds.length === 0) {
|
||||
return NextResponse.json({ error: 'File IDs array is required' }, { status: 400 });
|
||||
}
|
||||
|
||||
if (!gaPair || !gaPair.genreTitle || !gaPair.audienceTitle) {
|
||||
return NextResponse.json({ error: 'GA pair with genreTitle and audienceTitle is required' }, { status: 400 });
|
||||
}
|
||||
|
||||
console.log('开始处理批量手动添加GA对请求');
|
||||
console.log('项目ID:', projectId);
|
||||
console.log('请求的文件IDs:', fileIds);
|
||||
console.log('GA对:', gaPair);
|
||||
|
||||
// 使用 getUploadFileInfoById 逐个验证文件
|
||||
const validFiles = [];
|
||||
const invalidFileIds = [];
|
||||
|
||||
for (const fileId of fileIds) {
|
||||
try {
|
||||
console.log(`正在验证文件: ${fileId}`);
|
||||
const fileInfo = await getUploadFileInfoById(fileId);
|
||||
|
||||
if (fileInfo && fileInfo.projectId === projectId) {
|
||||
console.log(`文件验证成功: ${fileInfo.fileName}`);
|
||||
validFiles.push(fileInfo);
|
||||
} else if (fileInfo) {
|
||||
console.log(`文件属于其他项目: ${fileInfo.projectId} != ${projectId}`);
|
||||
invalidFileIds.push(fileId);
|
||||
} else {
|
||||
console.log(`文件不存在: ${fileId}`);
|
||||
invalidFileIds.push(fileId);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`验证文件 ${fileId} 时出错:`, String(error));
|
||||
invalidFileIds.push(fileId);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`文件验证完成: 有效${validFiles.length}个, 无效${invalidFileIds.length}个`);
|
||||
|
||||
if (validFiles.length === 0) {
|
||||
return NextResponse.json(
|
||||
{
|
||||
error: 'No valid files found',
|
||||
debug: {
|
||||
projectId,
|
||||
requestedIds: fileIds,
|
||||
invalidIds: invalidFileIds,
|
||||
message: 'None of the requested files belong to this project or exist in the database'
|
||||
}
|
||||
},
|
||||
{ status: 404 }
|
||||
);
|
||||
}
|
||||
|
||||
// 批量手动添加 GA 对
|
||||
console.log('开始批量手动添加GA对...');
|
||||
console.log('追加模式:', appendMode);
|
||||
const results = [];
|
||||
|
||||
for (const file of validFiles) {
|
||||
try {
|
||||
console.log(`处理文件: ${file.fileName}`);
|
||||
|
||||
// 检查是否已存在 GA 对
|
||||
const existingPairs = await getGaPairsByFileId(file.id);
|
||||
|
||||
let pairNumber = 1;
|
||||
if (appendMode && existingPairs && existingPairs.length > 0) {
|
||||
// 追加模式:在现有 GA 对后面添加
|
||||
pairNumber = existingPairs.length + 1;
|
||||
} else if (!appendMode && existingPairs && existingPairs.length > 0) {
|
||||
// 非追加模式:如果已存在 GA 对则跳过
|
||||
console.log(`文件 ${file.fileName} 已存在GA对,跳过`);
|
||||
results.push({
|
||||
fileId: file.id,
|
||||
fileName: file.fileName,
|
||||
success: true,
|
||||
skipped: true,
|
||||
message: 'GA pairs already exist'
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
// 创建 GA 对数据
|
||||
const gaPairData = [
|
||||
{
|
||||
projectId,
|
||||
fileId: file.id,
|
||||
pairNumber,
|
||||
genreTitle: gaPair.genreTitle.trim(),
|
||||
genreDesc: gaPair.genreDesc?.trim() || '',
|
||||
audienceTitle: gaPair.audienceTitle.trim(),
|
||||
audienceDesc: gaPair.audienceDesc?.trim() || '',
|
||||
isActive: true
|
||||
}
|
||||
];
|
||||
|
||||
// 保存 GA 对
|
||||
if (appendMode) {
|
||||
// 追加模式:只创建新的 GA 对
|
||||
await createGaPairs(gaPairData);
|
||||
} else {
|
||||
// 非追加模式:使用 saveGaPairs 替换现有的
|
||||
const { saveGaPairs } = await import('@/lib/db/ga-pairs');
|
||||
await saveGaPairs(projectId, file.id, [
|
||||
{
|
||||
genre: { title: gaPair.genreTitle.trim(), description: gaPair.genreDesc?.trim() || '' },
|
||||
audience: { title: gaPair.audienceTitle.trim(), description: gaPair.audienceDesc?.trim() || '' }
|
||||
}
|
||||
]);
|
||||
}
|
||||
|
||||
results.push({
|
||||
fileId: file.id,
|
||||
fileName: file.fileName,
|
||||
success: true,
|
||||
skipped: false,
|
||||
message: 'GA pair added successfully'
|
||||
});
|
||||
|
||||
console.log(`成功为文件 ${file.fileName} 添加GA对`);
|
||||
} catch (error) {
|
||||
console.error(`为文件 ${file.fileName} 添加GA对失败:`, error);
|
||||
results.push({
|
||||
fileId: file.id,
|
||||
fileName: file.fileName,
|
||||
success: false,
|
||||
skipped: false,
|
||||
error: error.message,
|
||||
message: `Failed: ${error.message}`
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 统计结果
|
||||
const successCount = results.filter(r => r.success).length;
|
||||
const failureCount = results.filter(r => !r.success).length;
|
||||
|
||||
console.log(`批量手动添加完成: 成功${successCount}个, 失败${failureCount}个`);
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
data: results,
|
||||
summary: {
|
||||
total: results.length,
|
||||
success: successCount,
|
||||
failure: failureCount,
|
||||
processed: validFiles.length,
|
||||
skipped: invalidFileIds.length
|
||||
},
|
||||
message: `Added GA pairs to ${successCount} files, ${failureCount} failed, ${invalidFileIds.length} files not found`
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error batch adding manual GA pairs:', String(error));
|
||||
return NextResponse.json({ error: String(error) || 'Failed to batch add manual GA pairs' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user