import { NextResponse } from "next/server"; import { auth } from "@/app/(auth)/auth"; import { getCanvasLayoutReplaceBatchActiveTaskId, getCanvasLayoutReplaceBatchForUser, markCanvasLayoutReplaceBatchItemsAdded, retryCanvasLayoutReplaceBatchItem, } from "@/lib/canvas/layout-replace-batch"; import { enqueueCanvasImageTask, ensureCanvasImageTaskActive, } from "@/lib/canvas/image-task-queue"; function normalizeUuid(value: unknown) { const id = String(value || "").trim(); return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id) ? id : ""; } export async function GET( _request: Request, { params }: { params: Promise<{ batchId: string }> } ) { try { const session = await auth(); if (!session?.user?.id) { return NextResponse.json({ success: false, error: "未登录" }, { status: 401 }); } const batchId = normalizeUuid((await params).batchId); if (!batchId) { return NextResponse.json({ success: false, error: "批次ID无效" }, { status: 400 }); } let batch = await getCanvasLayoutReplaceBatchForUser({ batchId, userId: session.user.id, }); if (!batch) { return NextResponse.json({ success: false, error: "批次不存在" }, { status: 404 }); } const activeTaskId = getCanvasLayoutReplaceBatchActiveTaskId(batch); if (activeTaskId) { await ensureCanvasImageTaskActive({ taskId: activeTaskId, userId: session.user.id, }); batch = await getCanvasLayoutReplaceBatchForUser({ batchId, userId: session.user.id, }); } return NextResponse.json({ success: true, batch }); } catch (error) { console.error("[Canvas Layout Replace Batch][Detail] Error:", error); return NextResponse.json( { success: false, error: error instanceof Error ? error.message : "查询批次失败", }, { status: 500 } ); } } export async function PATCH( request: Request, { params }: { params: Promise<{ batchId: string }> } ) { try { const session = await auth(); if (!session?.user?.id) { return NextResponse.json({ success: false, error: "未登录" }, { status: 401 }); } const batchId = normalizeUuid((await params).batchId); const body = await request.json().catch(() => ({})); if (body?.action === "retry") { const itemId = normalizeUuid(body?.itemId); if (!batchId || !itemId) { return NextResponse.json( { success: false, error: "缺少需要重试的结果" }, { status: 400 } ); } const taskId = await retryCanvasLayoutReplaceBatchItem({ batchId, itemId, userId: session.user.id, }); if (!taskId) { return NextResponse.json( { success: false, error: "该结果当前无法重试" }, { status: 409 } ); } await enqueueCanvasImageTask(taskId); return NextResponse.json({ success: true, taskId }); } const items = Array.isArray(body?.items) ? body.items .map((item: unknown) => { const record = item && typeof item === "object" && !Array.isArray(item) ? (item as Record) : {}; return { itemId: normalizeUuid(record.itemId), canvasNodeId: String(record.canvasNodeId || "").trim(), }; }) .filter( (item: { itemId: string; canvasNodeId: string }) => Boolean(item.itemId && item.canvasNodeId) ) : []; if (!batchId || items.length === 0) { return NextResponse.json( { success: false, error: "缺少已添加的结果信息" }, { status: 400 } ); } const updated = await markCanvasLayoutReplaceBatchItemsAdded({ batchId, userId: session.user.id, items, }); if (!updated) { return NextResponse.json({ success: false, error: "批次不存在" }, { status: 404 }); } return NextResponse.json({ success: true }); } catch (error) { console.error("[Canvas Layout Replace Batch][PATCH] Error:", error); return NextResponse.json( { success: false, error: error instanceof Error ? error.message : "更新批次失败", }, { status: 500 } ); } }