diff --git a/src/app/api/conversations/[id]/summary/route.ts b/src/app/api/conversations/[id]/summary/route.ts new file mode 100644 index 0000000..b175508 --- /dev/null +++ b/src/app/api/conversations/[id]/summary/route.ts @@ -0,0 +1,118 @@ +import { NextResponse } from 'next/server'; +import { db } from '@/drizzle/db'; +import { conversations } from '@/drizzle/schema'; +import { eq } from 'drizzle-orm'; +import { getCurrentUser } from '@/lib/auth'; + +interface UpdateSummaryRequest { + summary: string; +} + +// PUT /api/conversations/[id]/summary - 更新对话摘要 +export async function PUT( + request: Request, + { params }: { params: Promise<{ id: string }> } +) { + try { + const { id: conversationId } = await params; + const body: UpdateSummaryRequest = await request.json(); + const { summary } = body; + + // 获取当前登录用户 + const user = await getCurrentUser(); + if (!user) { + return NextResponse.json( + { error: '请先登录' }, + { status: 401 } + ); + } + + // 验证对话是否存在且属于当前用户 + const conversation = await db.query.conversations.findFirst({ + where: eq(conversations.conversationId, conversationId), + }); + + if (!conversation) { + return NextResponse.json( + { error: '对话不存在' }, + { status: 404 } + ); + } + + if (conversation.userId !== user.userId) { + return NextResponse.json( + { error: '无权访问此对话' }, + { status: 403 } + ); + } + + // 更新摘要 + await db + .update(conversations) + .set({ + summary, + updatedAt: new Date(), + }) + .where(eq(conversations.conversationId, conversationId)); + + return NextResponse.json({ + success: true, + message: '摘要已更新', + }); + } catch (error) { + console.error('[API/conversations/summary] 更新摘要错误:', error); + return NextResponse.json( + { error: '更新摘要失败' }, + { status: 500 } + ); + } +} + +// GET /api/conversations/[id]/summary - 获取对话摘要 +export async function GET( + request: Request, + { params }: { params: Promise<{ id: string }> } +) { + try { + const { id: conversationId } = await params; + + // 获取当前登录用户 + const user = await getCurrentUser(); + if (!user) { + return NextResponse.json( + { error: '请先登录' }, + { status: 401 } + ); + } + + // 获取对话 + const conversation = await db.query.conversations.findFirst({ + where: eq(conversations.conversationId, conversationId), + }); + + if (!conversation) { + return NextResponse.json( + { error: '对话不存在' }, + { status: 404 } + ); + } + + if (conversation.userId !== user.userId) { + return NextResponse.json( + { error: '无权访问此对话' }, + { status: 403 } + ); + } + + return NextResponse.json({ + summary: conversation.summary, + hasSummary: !!conversation.summary, + }); + } catch (error) { + console.error('[API/conversations/summary] 获取摘要错误:', error); + return NextResponse.json( + { error: '获取摘要失败' }, + { status: 500 } + ); + } +}