diff --git a/.gitignore b/.gitignore index 7b8da95..d3cb3f7 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,6 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# dummy contact submissions (generated at runtime) +data/contact-messages.json diff --git a/src/app/api/contact/route.ts b/src/app/api/contact/route.ts index 42a3173..bd399d8 100644 --- a/src/app/api/contact/route.ts +++ b/src/app/api/contact/route.ts @@ -1,6 +1,33 @@ import { NextResponse } from "next/server"; +import { mkdir, readFile, writeFile } from "fs/promises"; +import path from "path"; -// Dummy endpoint sementara, ganti dengan API asli saat sudah tersedia. +export const runtime = "nodejs"; + +const DATA_DIR = path.join(process.cwd(), "data"); +const DATA_FILE = path.join(DATA_DIR, "contact-messages.json"); + +interface ContactMessage { + id: string; + name: string; + email: string; + subject: string; + message: string; + created_at: string; +} + +async function readMessages(): Promise { + try { + const raw = await readFile(DATA_FILE, "utf-8"); + const parsed = JSON.parse(raw); + return Array.isArray(parsed) ? parsed : []; + } catch { + // File belum ada atau isinya rusak, mulai dari array kosong. + return []; + } +} + +// Dummy endpoint sementara, data disimpan ke data/contact-messages.json. export async function POST(request: Request) { const body = await request.json(); @@ -11,7 +38,25 @@ export async function POST(request: Request) { return NextResponse.json({ status: 422, message: "Data belum lengkap", errors: Object.fromEntries(missing.map((field) => [field, [`${field} harus diisi`]])) }, { status: 422 }); } - console.log("[contact] dummy submission:", body); + const entry: ContactMessage = { + id: crypto.randomUUID(), + name: String(body.name).trim(), + email: String(body.email).trim(), + subject: String(body.subject).trim(), + message: String(body.message).trim(), + created_at: new Date().toISOString(), + }; - return NextResponse.json({ status: 200, message: "Pesan berhasil dikirim", data: body }); + try { + const messages = await readMessages(); + messages.push(entry); + + await mkdir(DATA_DIR, { recursive: true }); + await writeFile(DATA_FILE, JSON.stringify(messages, null, 2), "utf-8"); + } catch (error) { + console.error("[contact] gagal menyimpan pesan:", error); + return NextResponse.json({ status: 500, message: "Gagal menyimpan pesan" }, { status: 500 }); + } + + return NextResponse.json({ status: 200, message: "Pesan berhasil dikirim", data: entry }); }