import { createClient } from '@/lib/supabase/server' import { PrismaClient } from '@prisma/client' import { NextRequest, NextResponse } from 'next/server' const prisma = new PrismaClient() // GET /api/chat/messages - Get messages for a stream export async function GET(request: NextRequest) { try { const streamId = request.nextUrl.searchParams.get('streamId') if (!streamId) { return NextResponse.json( { error: 'Stream ID is required' }, { status: 400 } ) } const messages = await prisma.chatMessage.findMany({ where: { streamId, isDeleted: false, }, select: { id: true, message: true, badges: true, createdAt: true, user: { select: { id: true, displayName: true, avatarUrl: true, verified: true, }, }, }, orderBy: { createdAt: 'asc' }, take: 100, // Last 100 messages }) return NextResponse.json({ messages }, { status: 200 }) } catch (error) { console.error('Error fetching chat messages:', error) return NextResponse.json( { error: 'Failed to fetch messages' }, { status: 500 } ) } } // POST /api/chat/messages - Send a message export async function POST(request: NextRequest) { const supabase = await createClient() const { data: { user: supabaseUser }, error: authError } = await supabase.auth.getUser() if (authError || !supabaseUser) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } try { const body = await request.json() const { streamId, message } = body // Validation if (!streamId || !message) { return NextResponse.json( { error: 'Stream ID and message are required' }, { status: 400 } ) } if (message.length > 500) { return NextResponse.json( { error: 'Message too long (max 500 characters)' }, { status: 400 } ) } // Get user const user = await prisma.user.findUnique({ where: { supabaseId: supabaseUser.id }, }) if (!user) { return NextResponse.json({ error: 'User not found' }, { status: 404 }) } // Create message const chatMessage = await prisma.chatMessage.create({ data: { streamId, userId: user.id, message: message.trim(), badges: user.isCreator ? ['creator'] : [], }, include: { user: { select: { id: true, displayName: true, avatarUrl: true, verified: true, }, }, }, }) return NextResponse.json(chatMessage, { status: 201 }) } catch (error) { console.error('Error posting message:', error) return NextResponse.json( { error: 'Failed to post message' }, { status: 500 } ) } }