import { NextRequest, NextResponse } from "next/server"; import { z } from "zod"; import { getPrisma } from "../../../lib/db"; import { ok, fail } from "../../../lib/http"; const ContactSchema = z.object({ firstName: z.string().min(1, "First name is required"), lastName: z.string().min(1, "Last name is required"), email: z.string().email("Invalid email address"), subject: z.string().min(1, "Subject is required"), message: z.string().min(10, "Message must be at least 10 characters"), }); export async function POST(req: NextRequest) { const parsed = ContactSchema.safeParse(await req.json().catch(() => ({}))); if (!parsed.success) { console.error("[CONTACT] Validation error:", parsed.error); const firstError = parsed.error.errors[0]; return NextResponse.json( { ok: false, message: firstError.message }, { status: 400 } ); } const { firstName, lastName, email, subject, message } = parsed.data; const name = `${firstName} ${lastName}`; console.log("[CONTACT] New message from:", email); try { const prisma = await getPrisma(); if (!prisma) { console.error("[CONTACT] Database not configured"); return NextResponse.json( { ok: false, message: "Service temporarily unavailable. Please try again later." }, { status: 503 } ); } // Store contact message in database await prisma.contactMessage.create({ data: { name, email, subject, message, status: "NEW", }, }); console.log("[CONTACT] Message saved from:", email); // TODO: Send email notification to admin // TODO: Send confirmation email to user return ok({ message: "Message received. We'll get back to you soon." }); } catch (error) { console.error("[CONTACT] Error saving message:", error); return NextResponse.json( { ok: false, message: "Failed to send message. Please try again." }, { status: 500 } ); } }