46 lines
1.7 KiB
TypeScript
46 lines
1.7 KiB
TypeScript
import { NextResponse } from "next/server";
|
||
import { sendeKontaktEmail, sendeAnfrageBestaetigung } from "@/lib/mailer";
|
||
import { createServiceClient } from "@/lib/supabase";
|
||
|
||
export async function POST(request: Request) {
|
||
let body: Record<string, string>;
|
||
try {
|
||
body = await request.json();
|
||
} catch {
|
||
return NextResponse.json({ ok: false, error: "Ungültige Anfrage" }, { status: 400 });
|
||
}
|
||
|
||
const { name, email, betreff, nachricht, telefon } = body;
|
||
if (!name?.trim() || !email?.trim() || !betreff?.trim()) {
|
||
return NextResponse.json({ ok: false, error: "Pflichtfelder fehlen" }, { status: 400 });
|
||
}
|
||
|
||
const result = await sendeKontaktEmail({ name, email, betreff, nachricht, telefon });
|
||
|
||
try {
|
||
const db = createServiceClient();
|
||
await db.from("anfragen").insert({ name, email, betreff, nachricht: nachricht || null, status: "offen" });
|
||
} catch (err) {
|
||
console.error("[Contact] Supabase insert error:", err);
|
||
}
|
||
|
||
sendeAnfrageBestaetigung({ name, email, betreff }).catch((err) =>
|
||
console.error("[Contact] Bestätigungsmail fehlgeschlagen:", err)
|
||
);
|
||
|
||
if (!result.sent && !result.queued) {
|
||
console.error(
|
||
`[Contact] UNZUSTELLBAR – Anfrage konnte weder gesendet noch in Queue gespeichert werden:\n` +
|
||
` Zeit: ${new Date().toISOString()}\n` +
|
||
` Name: ${name}\n` +
|
||
` E-Mail: ${email}\n` +
|
||
` Telefon: ${telefon ?? "(nicht angegeben)"}\n` +
|
||
` Betreff: ${betreff}\n` +
|
||
` Nachricht: ${nachricht ?? "(keine)"}`
|
||
);
|
||
return NextResponse.json({ ok: false, error: "Mail konnte nicht gesendet werden" }, { status: 500 });
|
||
}
|
||
|
||
return NextResponse.json({ ok: true, queued: result.queued });
|
||
}
|