feat(API): 添加对话摘要管理接口
- 实现 GET /api/conversations/[id]/summary 获取摘要 - 实现 PUT /api/conversations/[id]/summary 更新摘要 - 添加用户权限验证
This commit is contained in:
parent
61fe53915c
commit
94d97ace04
118
src/app/api/conversations/[id]/summary/route.ts
Normal file
118
src/app/api/conversations/[id]/summary/route.ts
Normal 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 }
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user