96 lines
2.7 KiB
TypeScript
96 lines
2.7 KiB
TypeScript
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 }
|
|
);
|
|
}
|
|
}
|