66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
|
|
type ContactPayload = {
|
|
name?: string;
|
|
phone?: string;
|
|
email?: string;
|
|
projectType?: string;
|
|
materialInterest?: string;
|
|
message?: string;
|
|
};
|
|
|
|
function isValidEmail(value: string) {
|
|
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
|
|
}
|
|
|
|
function isValidPhone(value: string) {
|
|
return /^[0-9()+.\-\s]{10,}$/.test(value);
|
|
}
|
|
|
|
export async function POST(request: Request) {
|
|
const payload = (await request.json()) as ContactPayload;
|
|
const fieldErrors: Record<string, string> = {};
|
|
|
|
const name = payload.name?.trim() ?? "";
|
|
const phone = payload.phone?.trim() ?? "";
|
|
const email = payload.email?.trim() ?? "";
|
|
const message = payload.message?.trim() ?? "";
|
|
|
|
if (!name) {
|
|
fieldErrors.name = "Please enter your full name.";
|
|
}
|
|
|
|
if (!phone) {
|
|
fieldErrors.phone = "Please enter a phone number.";
|
|
} else if (!isValidPhone(phone)) {
|
|
fieldErrors.phone = "Please enter a valid phone number.";
|
|
}
|
|
|
|
if (!email) {
|
|
fieldErrors.email = "Please enter an email address.";
|
|
} else if (!isValidEmail(email)) {
|
|
fieldErrors.email = "Please enter a valid email address.";
|
|
}
|
|
|
|
if (!message) {
|
|
fieldErrors.message = "Please describe your project or material request.";
|
|
}
|
|
|
|
if (Object.keys(fieldErrors).length > 0) {
|
|
return NextResponse.json(
|
|
{
|
|
success: false,
|
|
message: "Please correct the highlighted fields and try again.",
|
|
fieldErrors,
|
|
},
|
|
{ status: 400 },
|
|
);
|
|
}
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
message:
|
|
"Thanks for reaching out. This form is wired to a placeholder API route and ready for email delivery integration.",
|
|
});
|
|
}
|