Refactor homepage for focused search and data display; streamline data platform; enhance user and tag management; focus AI assistant on data analysis and report generation. Co-authored-by: null <4804959+fnvtk@users.noreply.github.com>
106 lines
3.1 KiB
TypeScript
106 lines
3.1 KiB
TypeScript
import { type NextRequest, NextResponse } from "next/server"
|
|
import { IngestionService, type IngestionRequest } from "@/services/IngestionService"
|
|
|
|
// POST /api/ingest - 数据接入端点
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const body = await request.json()
|
|
|
|
// 验证请求数据
|
|
if (!body.source || !body.originalData) {
|
|
return NextResponse.json({ error: "缺少必需字段: source 和 originalData" }, { status: 400 })
|
|
}
|
|
|
|
const ingestionRequest: IngestionRequest = {
|
|
source: body.source,
|
|
sourceUserId: body.sourceUserId,
|
|
sourceRecordId: body.sourceRecordId,
|
|
originalData: body.originalData,
|
|
timestamp: body.timestamp || new Date().toISOString(),
|
|
}
|
|
|
|
const ingestionService = IngestionService.getInstance()
|
|
const result = await ingestionService.processIngestionRequest(ingestionRequest)
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
data: {
|
|
userId: result.userId,
|
|
coreProfileFields: Object.keys(result.coreProfile).length,
|
|
tagsCount: result.unifiedTags.length,
|
|
sourceProfilesCount: result.sourceProfiles.length,
|
|
},
|
|
message: "数据接入成功",
|
|
})
|
|
} catch (error) {
|
|
console.error("数据接入API错误:", error)
|
|
return NextResponse.json(
|
|
{
|
|
error: "数据接入失败",
|
|
details: (error as Error).message,
|
|
},
|
|
{ status: 500 },
|
|
)
|
|
}
|
|
}
|
|
|
|
// POST /api/ingest/batch - 批量数据接入端点
|
|
export async function PUT(request: NextRequest) {
|
|
try {
|
|
const body = await request.json()
|
|
|
|
if (!Array.isArray(body.requests)) {
|
|
return NextResponse.json({ error: "requests 必须是数组" }, { status: 400 })
|
|
}
|
|
|
|
const ingestionService = IngestionService.getInstance()
|
|
const results = await ingestionService.processBatchIngestion(body.requests)
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
data: {
|
|
processedCount: results.length,
|
|
totalRequests: body.requests.length,
|
|
results: results.map((result) => ({
|
|
userId: result.userId,
|
|
coreProfileFields: Object.keys(result.coreProfile).length,
|
|
tagsCount: result.unifiedTags.length,
|
|
})),
|
|
},
|
|
message: `批量处理完成,成功处理 ${results.length}/${body.requests.length} 条记录`,
|
|
})
|
|
} catch (error) {
|
|
console.error("批量数据接入API错误:", error)
|
|
return NextResponse.json(
|
|
{
|
|
error: "批量数据接入失败",
|
|
details: (error as Error).message,
|
|
},
|
|
{ status: 500 },
|
|
)
|
|
}
|
|
}
|
|
|
|
// GET /api/ingest/status - 获取数据接入状态
|
|
export async function GET(request: NextRequest) {
|
|
try {
|
|
// 模拟获取接入状态数据
|
|
const status = {
|
|
totalIngested: 125678,
|
|
todayIngested: 1234,
|
|
activeSources: 8,
|
|
lastIngestionTime: new Date().toISOString(),
|
|
dataQuality: 94.6,
|
|
processingQueue: 23,
|
|
}
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
data: status,
|
|
})
|
|
} catch (error) {
|
|
console.error("获取接入状态API错误:", error)
|
|
return NextResponse.json({ error: "获取状态失败" }, { status: 500 })
|
|
}
|
|
}
|