import { getServerSession } from 'next-auth'; import { authOptions } from '@/lib/auth-options'; import { prisma } from '@/lib/prisma'; import { NextRequest, NextResponse } from 'next/server'; export async function GET(request: NextRequest) { const videoId = request.nextUrl.searchParams.get('videoId'); if (!videoId) { return NextResponse.json( { error: 'videoId is required' }, { status: 400 } ); } try { const comments = await prisma.comment.findMany({ where: { videoId }, include: { user: { select: { id: true, name: true, email: true, image: true, }, }, replies: { include: { user: { select: { id: true, name: true, email: true, image: true, }, }, }, orderBy: { createdAt: 'asc', }, }, }, orderBy: { createdAt: 'desc', }, }); return NextResponse.json(comments); } catch (error) { console.error('Failed to fetch comments:', error); return NextResponse.json( { error: 'Failed to fetch comments' }, { status: 500 } ); } } export async function POST(request: NextRequest) { const session = await getServerSession(authOptions); if (!session?.user) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); } try { const { videoId, content } = await request.json(); if (!videoId || !content || typeof content !== 'string' || content.trim().length === 0) { return NextResponse.json( { error: 'videoId and non-empty content are required' }, { status: 400 } ); } // Verify video exists const video = await prisma.video.findUnique({ where: { id: videoId }, }); if (!video) { return NextResponse.json({ error: 'Video not found' }, { status: 404 }); } const comment = await prisma.comment.create({ data: { videoId, userId: (session.user as any).id, content: content.trim(), }, include: { user: { select: { id: true, name: true, email: true, image: true, }, }, replies: { include: { user: { select: { id: true, name: true, email: true, image: true, }, }, }, }, }, }); return NextResponse.json(comment, { status: 201 }); } catch (error) { console.error('Failed to create comment:', error); return NextResponse.json( { error: 'Failed to create comment' }, { status: 500 } ); } }