feat(API): 添加对话摘要管理接口

- 实现 GET /api/conversations/[id]/summary 获取摘要
- 实现 PUT /api/conversations/[id]/summary 更新摘要
- 添加用户权限验证
This commit is contained in:
gaoziman 2025-12-28 01:31:26 +08:00
parent 61fe53915c
commit 94d97ace04

View File

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