Undangan/backend/app/Http/Controllers/Api/FormApiController.php

80 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Pelanggan;
use App\Models\PelangganDetail;
use App\Models\Template;
use Illuminate\Http\Request;
class FormApiController extends Controller
{
public function store(Request $request)
{
// ✅ Validasi dasar
$rules = [
'template_id' => 'required|exists:templates,id',
'nama_pemesan' => 'required|string|max:255',
'no_hp' => 'required|string|max:20',
'email' => 'required|email',
];
// ✅ Ambil template & fiturnya
$template = Template::with(['fiturs', 'kategori'])->findOrFail($request->template_id);
// ✅ Loop fitur → generate aturan validasi dinamis
foreach ($template->fiturs as $fitur) {
$field = str_replace(' ', '_', strtolower($fitur->deskripsi)); // contoh: "Nama Lengkap Pria" → "nama_lengkap_pria"
// Aturan default: required string max 255
$rules[$field] = 'nullable|string|max:255';
// Kalau fitur ada kata "tanggal"
if (str_contains(strtolower($fitur->deskripsi), 'tanggal')) {
$rules[$field] = 'nullable|date';
}
// Kalau fitur ada kata "foto" atau "galeri"
if (str_contains(strtolower($fitur->deskripsi), 'galeri')) {
$rules['galeri'] = 'nullable|array|max:10';
$rules['galeri.*'] = 'image|mimes:jpeg,png,jpg,gif|max:2048';
}
}
// ✅ Jalankan validasi
$data = $request->validate($rules);
// --- PROSES UPLOAD GALERI ---
$galleryPaths = [];
if ($request->hasFile('galeri')) {
foreach ($request->file('galeri') as $file) {
$galleryPaths[] = $file->store('gallery', 'public');
}
}
$data['galeri'] = $galleryPaths;
// ✅ Simpan ke tabel pelanggan
$pelanggan = Pelanggan::create([
'nama_pemesan' => $data['nama_pemesan'],
'nama_template' => $template->nama_template,
'kategori' => $template->kategori->nama ?? '-',
'email' => $data['email'],
'no_tlpn' => $data['no_hp'],
'harga' => $template->harga,
]);
// ✅ Simpan detail form (dinamis)
PelangganDetail::create([
'pelanggan_id' => $pelanggan->id,
'detail_form' => $data,
]);
return response()->json([
'success' => true,
'message' => 'Form berhasil dikirim sesuai fitur template',
'data' => $pelanggan->load('details')
], 201);
}
}