first-update
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import {
|
||||
getDatasets,
|
||||
getBalancedDatasetsByTags,
|
||||
getTagsWithDatasetCounts,
|
||||
getDatasetsBatch,
|
||||
getBalancedDatasetsByTagsBatch,
|
||||
getDatasetsByIds,
|
||||
getDatasetsByIdsBatch
|
||||
} from '@/lib/db/datasets';
|
||||
|
||||
/**
|
||||
* 获取导出数据集
|
||||
*/
|
||||
export async function GET(request, { params }) {
|
||||
try {
|
||||
const { projectId } = params;
|
||||
const { searchParams } = new URL(request.url);
|
||||
|
||||
// 验证项目ID
|
||||
if (!projectId) {
|
||||
return NextResponse.json({ error: 'Project ID cannot be empty' }, { status: 400 });
|
||||
}
|
||||
|
||||
const confirmedParam = searchParams.get('confirmed');
|
||||
const confirmed = confirmedParam === null ? undefined : confirmedParam === 'true';
|
||||
|
||||
// 获取标签统计信息
|
||||
const tagStats = await getTagsWithDatasetCounts(projectId, confirmed);
|
||||
return NextResponse.json(tagStats);
|
||||
} catch (error) {
|
||||
console.error('Failed to get tag statistics:', String(error));
|
||||
return NextResponse.json(
|
||||
{
|
||||
error: error.message || 'Failed to get tag statistics'
|
||||
},
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取标签统计信息
|
||||
*/
|
||||
export async function POST(request, { params }) {
|
||||
try {
|
||||
const { projectId } = params;
|
||||
const body = await request.json();
|
||||
|
||||
// 验证项目ID
|
||||
if (!projectId) {
|
||||
return NextResponse.json({ error: 'Project ID cannot be empty' }, { status: 400 });
|
||||
}
|
||||
|
||||
let status = body.status;
|
||||
let confirmed = undefined;
|
||||
if (status === 'confirmed') confirmed = true;
|
||||
if (status === 'unconfirmed') confirmed = false;
|
||||
|
||||
// 检查是否是分批导出模式
|
||||
const batchMode = body.batchMode ? 'true' : 'false';
|
||||
const offset = body.offset ?? 0;
|
||||
const batchSize = body.batchSize ?? 1000;
|
||||
|
||||
// 检查是否是平衡导出
|
||||
const balanceMode = body.balanceMode ? 'true' : 'false';
|
||||
const balanceConfig = body.balanceConfig;
|
||||
|
||||
// 检查是否有选中的数据集 ID
|
||||
const selectedIds = Array.isArray(body.selectedIds) ? body.selectedIds : null;
|
||||
|
||||
if (batchMode === 'true') {
|
||||
// 分批导出模式
|
||||
if (selectedIds && selectedIds.length > 0) {
|
||||
// 按选中 ID 分批导出
|
||||
const datasets = await getDatasetsByIdsBatch(projectId, selectedIds, offset, batchSize);
|
||||
const hasMore = datasets.length === batchSize;
|
||||
return NextResponse.json({
|
||||
data: datasets,
|
||||
hasMore,
|
||||
offset: offset + datasets.length
|
||||
});
|
||||
} else if (balanceMode === 'true' && balanceConfig) {
|
||||
// 平衡分批导出
|
||||
const parsedConfig = typeof balanceConfig === 'string' ? JSON.parse(balanceConfig) : balanceConfig;
|
||||
const result = await getBalancedDatasetsByTagsBatch(projectId, parsedConfig, confirmed, offset, batchSize);
|
||||
return NextResponse.json({
|
||||
data: result.data,
|
||||
hasMore: result.hasMore,
|
||||
offset: offset + result.data.length
|
||||
});
|
||||
} else {
|
||||
// 常规分批导出
|
||||
const datasets = await getDatasetsBatch(projectId, confirmed, offset, batchSize);
|
||||
const hasMore = datasets.length === batchSize;
|
||||
return NextResponse.json({
|
||||
data: datasets,
|
||||
hasMore,
|
||||
offset: offset + datasets.length
|
||||
});
|
||||
}
|
||||
} else {
|
||||
// 传统一次性导出模式(保持向后兼容)
|
||||
if (selectedIds && selectedIds.length > 0) {
|
||||
// 按选中 ID 导出
|
||||
const datasets = await getDatasetsByIds(projectId, selectedIds);
|
||||
return NextResponse.json(datasets);
|
||||
} else if (balanceMode === 'true' && balanceConfig) {
|
||||
// 平衡导出模式
|
||||
const parsedConfig = typeof balanceConfig === 'string' ? JSON.parse(balanceConfig) : balanceConfig;
|
||||
const datasets = await getBalancedDatasetsByTags(projectId, parsedConfig, confirmed);
|
||||
return NextResponse.json(datasets);
|
||||
} else {
|
||||
// 常规导出模式
|
||||
const datasets = await getDatasets(projectId, confirmed);
|
||||
return NextResponse.json(datasets);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Failed to get datasets:', String(error));
|
||||
return NextResponse.json(
|
||||
{
|
||||
error: error.message || 'Failed to get datasets'
|
||||
},
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user