import { type NextRequest, NextResponse } from "next/server"; import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); export async function GET(request: NextRequest) { try { const { searchParams } = new URL(request.url); const filter = searchParams.get('filter') || 'all'; const limit = parseInt(searchParams.get('limit') || '50'); const offset = parseInt(searchParams.get('offset') || '0'); let whereClause = {}; switch (filter) { case 'unread': whereClause = { responded: false }; break; case 'responded': whereClause = { responded: true }; break; default: whereClause = {}; } const [contacts, total] = await Promise.all([ prisma.contact.findMany({ where: whereClause, orderBy: { createdAt: 'desc' }, take: limit, skip: offset, }), prisma.contact.count({ where: whereClause }) ]); return NextResponse.json({ contacts, total, hasMore: offset + contacts.length < total }); } catch (error) { console.error('Error fetching contacts:', error); return NextResponse.json( { error: 'Failed to fetch contacts' }, { status: 500 } ); } } export async function POST(request: NextRequest) { try { const body = await request.json(); const { name, email, subject, message } = body; // Validate required fields if (!name || !email || !subject || !message) { return NextResponse.json( { error: 'All fields are required' }, { status: 400 } ); } // Validate email format const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { return NextResponse.json( { error: 'Invalid email format' }, { status: 400 } ); } const contact = await prisma.contact.create({ data: { name, email, subject, message, responded: false } }); return NextResponse.json({ message: 'Contact created successfully', contact }, { status: 201 }); } catch (error) { console.error('Error creating contact:', error); return NextResponse.json( { error: 'Failed to create contact' }, { status: 500 } ); } }