feat(API): 添加消息更新接口
- 新增 PATCH /api/messages/[messageId] 用于更新消息 - 支持更新消息的图片数据(用于保存 Pyodide 执行结果) - 支持追加模式更新图片数组 - 新增 GET /api/messages/[messageId] 获取单个消息
This commit is contained in:
parent
68ba9b3204
commit
5cc4fbb7a0
119
src/app/api/messages/[messageId]/route.ts
Normal file
119
src/app/api/messages/[messageId]/route.ts
Normal file
@ -0,0 +1,119 @@
|
||||
import { NextResponse } from 'next/server';
|
||||
import { db } from '@/drizzle/db';
|
||||
import { messages } from '@/drizzle/schema';
|
||||
import { eq } from 'drizzle-orm';
|
||||
|
||||
interface RouteParams {
|
||||
params: Promise<{ messageId: string }>;
|
||||
}
|
||||
|
||||
/**
|
||||
* PATCH /api/messages/[messageId] - 更新消息
|
||||
* 主要用于更新消息的图片数据(Pyodide 执行后保存图片)
|
||||
*/
|
||||
export async function PATCH(request: Request, { params }: RouteParams) {
|
||||
try {
|
||||
const { messageId } = await params;
|
||||
const body = await request.json();
|
||||
|
||||
// 验证 messageId
|
||||
if (!messageId) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Message ID is required' },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
|
||||
// 查找消息
|
||||
const existingMessage = await db.query.messages.findFirst({
|
||||
where: eq(messages.messageId, messageId),
|
||||
});
|
||||
|
||||
if (!existingMessage) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Message not found' },
|
||||
{ status: 404 }
|
||||
);
|
||||
}
|
||||
|
||||
// 构建更新数据
|
||||
const updateData: {
|
||||
images?: string[];
|
||||
content?: string;
|
||||
updatedAt: Date;
|
||||
} = {
|
||||
updatedAt: new Date(),
|
||||
};
|
||||
|
||||
// 更新图片(追加模式)
|
||||
if (body.images && Array.isArray(body.images)) {
|
||||
const existingImages = (existingMessage.images as string[]) || [];
|
||||
updateData.images = [...existingImages, ...body.images];
|
||||
}
|
||||
|
||||
// 更新内容(如果提供)
|
||||
if (body.content !== undefined) {
|
||||
updateData.content = body.content;
|
||||
}
|
||||
|
||||
// 执行更新
|
||||
await db
|
||||
.update(messages)
|
||||
.set(updateData)
|
||||
.where(eq(messages.messageId, messageId));
|
||||
|
||||
// 返回更新后的消息
|
||||
const updatedMessage = await db.query.messages.findFirst({
|
||||
where: eq(messages.messageId, messageId),
|
||||
});
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
message: updatedMessage,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Update message error:', error);
|
||||
return NextResponse.json(
|
||||
{ error: 'Failed to update message' },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /api/messages/[messageId] - 获取单个消息
|
||||
*/
|
||||
export async function GET(request: Request, { params }: RouteParams) {
|
||||
try {
|
||||
const { messageId } = await params;
|
||||
|
||||
if (!messageId) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Message ID is required' },
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
|
||||
const message = await db.query.messages.findFirst({
|
||||
where: eq(messages.messageId, messageId),
|
||||
});
|
||||
|
||||
if (!message) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Message not found' },
|
||||
{ status: 404 }
|
||||
);
|
||||
}
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
message,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Get message error:', error);
|
||||
return NextResponse.json(
|
||||
{ error: 'Failed to get message' },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user