fix: 画布 API 支持 upsert 操作
当画布不存在时自动创建,而不是返回 404 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
c78743cbed
commit
e84b002302
@ -38,7 +38,7 @@ export async function GET(
|
||||
}
|
||||
}
|
||||
|
||||
// 更新画布
|
||||
// 更新画布(支持 upsert:如果不存在则创建)
|
||||
export async function PUT(
|
||||
request: NextRequest,
|
||||
{ params }: { params: Promise<{ id: string }> }
|
||||
@ -53,30 +53,58 @@ export async function PUT(
|
||||
const body = await request.json();
|
||||
const { title, description, thumbnail, canvasData } = body;
|
||||
|
||||
const updateData: any = { updatedAt: new Date() };
|
||||
if (title !== undefined) updateData.title = title;
|
||||
if (description !== undefined) updateData.description = description;
|
||||
if (thumbnail !== undefined) updateData.thumbnail = thumbnail;
|
||||
if (canvasData !== undefined) updateData.canvasData = canvasData;
|
||||
|
||||
const [updatedProject] = await db
|
||||
.update(canvasProject)
|
||||
.set(updateData)
|
||||
// 先检查画布是否存在
|
||||
const [existingProject] = await db
|
||||
.select()
|
||||
.from(canvasProject)
|
||||
.where(
|
||||
and(
|
||||
eq(canvasProject.id, id),
|
||||
eq(canvasProject.userId, session.user.id)
|
||||
)
|
||||
)
|
||||
.returning();
|
||||
);
|
||||
|
||||
if (!updatedProject) {
|
||||
return NextResponse.json({ success: false, error: '画布不存在' }, { status: 404 });
|
||||
if (existingProject) {
|
||||
// 更新现有画布
|
||||
const updateData: any = { updatedAt: new Date() };
|
||||
if (title !== undefined) updateData.title = title;
|
||||
if (description !== undefined) updateData.description = description;
|
||||
if (thumbnail !== undefined) updateData.thumbnail = thumbnail;
|
||||
if (canvasData !== undefined) updateData.canvasData = canvasData;
|
||||
|
||||
const [updatedProject] = await db
|
||||
.update(canvasProject)
|
||||
.set(updateData)
|
||||
.where(
|
||||
and(
|
||||
eq(canvasProject.id, id),
|
||||
eq(canvasProject.userId, session.user.id)
|
||||
)
|
||||
)
|
||||
.returning();
|
||||
|
||||
return NextResponse.json({ success: true, data: updatedProject });
|
||||
} else {
|
||||
// 创建新画布(使用指定 ID)
|
||||
const [newProject] = await db
|
||||
.insert(canvasProject)
|
||||
.values({
|
||||
id, // 使用指定的 ID
|
||||
userId: session.user.id,
|
||||
title: title || '未命名画布',
|
||||
description,
|
||||
canvasData: canvasData || {
|
||||
nodes: [],
|
||||
edges: [],
|
||||
viewport: { x: 0, y: 0, zoom: 1 },
|
||||
},
|
||||
})
|
||||
.returning();
|
||||
|
||||
return NextResponse.json({ success: true, data: newProject });
|
||||
}
|
||||
|
||||
return NextResponse.json({ success: true, data: updatedProject });
|
||||
} catch (error) {
|
||||
console.error('更新画布失败:', error);
|
||||
console.error('更新/创建画布失败:', error);
|
||||
return NextResponse.json({ success: false, error: '更新画布失败' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user