feat: implement contact message storage and retrieval functionality

This commit is contained in:
fadilkun45 2026-09-07 11:43:18 +07:00
parent 7b4b955c99
commit f05f5a01ad
2 changed files with 51 additions and 3 deletions

3
.gitignore vendored
View File

@ -40,3 +40,6 @@ yarn-error.log*
# typescript
*.tsbuildinfo
next-env.d.ts
# dummy contact submissions (generated at runtime)
data/contact-messages.json

View File

@ -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<ContactMessage[]> {
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 });
}