import { NextRequest, NextResponse } from 'next/server'; import { db } from '@/drizzle/db'; import { userFavoriteAssistants, assistants } from '@/drizzle/schema'; import { eq, and } from 'drizzle-orm'; interface RouteParams { params: Promise<{ id: string }>; } // POST /api/assistants/[id]/favorite - 收藏助手 export async function POST(request: NextRequest, { params }: RouteParams) { try { const { id } = await params; const assistantId = parseInt(id); const body = await request.json(); const { userId } = body; if (isNaN(assistantId)) { return NextResponse.json({ error: 'Invalid assistant ID' }, { status: 400 }); } if (!userId) { return NextResponse.json({ error: 'User ID is required' }, { status: 400 }); } // 检查助手是否存在 const [assistant] = await db .select() .from(assistants) .where(eq(assistants.id, assistantId)) .limit(1); if (!assistant) { return NextResponse.json({ error: 'Assistant not found' }, { status: 404 }); } // 检查是否已经收藏 const [existingFavorite] = await db .select() .from(userFavoriteAssistants) .where( and( eq(userFavoriteAssistants.userId, userId), eq(userFavoriteAssistants.assistantId, assistantId) ) ) .limit(1); if (existingFavorite) { return NextResponse.json({ message: 'Already favorited' }, { status: 200 }); } // 添加收藏 const [newFavorite] = await db .insert(userFavoriteAssistants) .values({ userId, assistantId, }) .returning(); return NextResponse.json(newFavorite, { status: 201 }); } catch (error) { console.error('Failed to favorite assistant:', error); return NextResponse.json( { error: 'Failed to favorite assistant' }, { status: 500 } ); } } // DELETE /api/assistants/[id]/favorite - 取消收藏 export async function DELETE(request: NextRequest, { params }: RouteParams) { try { const { id } = await params; const assistantId = parseInt(id); const searchParams = request.nextUrl.searchParams; const userId = searchParams.get('userId'); if (isNaN(assistantId)) { return NextResponse.json({ error: 'Invalid assistant ID' }, { status: 400 }); } if (!userId) { return NextResponse.json({ error: 'User ID is required' }, { status: 400 }); } // 删除收藏记录 await db .delete(userFavoriteAssistants) .where( and( eq(userFavoriteAssistants.userId, userId), eq(userFavoriteAssistants.assistantId, assistantId) ) ); return NextResponse.json({ success: true }); } catch (error) { console.error('Failed to unfavorite assistant:', error); return NextResponse.json( { error: 'Failed to unfavorite assistant' }, { status: 500 } ); } }