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 } ); } }