From dfc1dd3e3a1bffaa0537f280c3df7020596b76dc Mon Sep 17 00:00:00 2001 From: LailaWulandarii Date: Thu, 29 Jan 2026 15:11:14 +0700 Subject: [PATCH] refactor: enhance store method in PesanBuketController with request validation and improved error handling --- .../Controllers/User/PesanBuketController.php | 94 +++++-------------- 1 file changed, 25 insertions(+), 69 deletions(-) diff --git a/app/Http/Controllers/User/PesanBuketController.php b/app/Http/Controllers/User/PesanBuketController.php index 2142c2e..74e4299 100755 --- a/app/Http/Controllers/User/PesanBuketController.php +++ b/app/Http/Controllers/User/PesanBuketController.php @@ -8,10 +8,9 @@ use App\Models\TransaksiBuket; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Storage; -use Illuminate\Support\Facades\Validator; -use App\Http\Requests\User\PesanBuketRequest; use App\Services\WhatsAppService; +use Illuminate\Support\Str; +use App\Http\Requests\User\PesanBuketRequest; class PesanBuketController extends Controller { @@ -55,94 +54,51 @@ public function formulir($slug_id) $buket = Buket::findOrFail($slug_id); return view('user/pembayaran-buket', compact('buket')); } - public function store(Request $request) + public function store(PesanBuketRequest $request) { $buket = Buket::findOrFail($request->id_buket); - $validator = Validator::make($request->all(), [ - 'nama' => 'required|string|min:3|max:100', - 'no_wa' => 'required|numeric|digits_between:10,15', - 'tgl_ambil' => 'required|date|after_or_equal:today', - 'waktu_ambil' => 'required', - 'waktu_ambil' => [ - 'required', - 'date_format:H:i', - 'after_or_equal:09:00', - 'before_or_equal:21:00', - ], - 'bukti_bayar' => 'required|image|mimes:jpeg,png,jpg|max:2048', - 'request_khusus' => 'nullable|string|max:255', - 'ucapan' => 'nullable|string|max:500', - ], [ - 'required' => 'Kolom :attribute wajib diisi.', - 'string' => 'Input :attribute harus berupa teks valid.', - 'min' => ':attribute terlalu pendek, minimal :min karakter.', - 'max' => ':attribute terlalu panjang, maksimal :max karakter.', - 'numeric' => ':attribute harus berupa angka.', - 'digits_between' => ':attribute harus antara :min sampai :max digit.', - 'date' => 'Format tanggal pada :attribute tidak valid.', - 'after_or_equal' => ':attribute tidak boleh tanggal yang sudah lewat.', - 'image' => ':attribute harus berupa file gambar.', - 'mimes' => 'Format :attribute harus jpeg, png, atau jpg.', - 'bukti_bayar.max' => 'Ukuran :attribute maksimal adalah 2MB.', - 'waktu_ambil.after_or_equal' => 'Jam operasional kami mulai pukul 09:00.', - 'waktu_ambil.before_or_equal' => 'Jam operasional kami berakhir pukul 21:00.', - ], [ - 'nama' => 'nama pemesan', - 'no_wa' => 'nomor WhatsApp', - 'tgl_ambil' => 'tanggal pengambilan', - 'waktu_ambil' => 'waktu pengambilan', - 'bukti_bayar' => 'bukti pembayaran', - 'ucapan' => 'kartu ucapan', - ]); - - if ($validator->fails()) { - return back()->withErrors($validator)->withInput(); - } - try { - db::beginTransaction(); - $pelanggan = Pelanggan::create([ - 'nama' => $request->nama, - 'no_wa' => $request->no_wa, - ]); - $namaFile = null; + DB::beginTransaction(); + $pelanggan = Pelanggan::create($request->only([ + 'nama', + 'no_wa' + ])); + $pathBukti = null; if ($request->hasFile('bukti_bayar')) { $file = $request->file('bukti_bayar'); - $namaFile = 'bukti_' . time() . '.' . $file->getClientOriginalExtension(); - $pathBukti = $file->storeAs('img/payment/buket', $namaFile, 'public'); + $namaFile = 'bukti_' . time() . '.' . + $file->getClientOriginalExtension(); + $pathBukti = $file->storeAs( + 'img/payment/buket', + $namaFile, + 'public' + ); } $transaksi = TransaksiBuket::create([ 'id_pelanggan' => $pelanggan->id_pelanggan, 'id_buket' => $request->id_buket, - 'tgl_ambil' => $request->tgl_ambil . ' ' . $request->waktu_ambil, + 'tgl_ambil' => $request->tgl_ambil . ' ' . + $request->waktu_ambil, 'request' => $request->request_khusus, 'ucapan' => $request->ucapan, 'bukti_bayar' => $pathBukti, 'status_transaksi' => 'menunggu_verifikasi', 'total_bayar' => $buket->harga, - 'no_invoice' => 'INV-BUKET-' . strtoupper(\Illuminate\Support\Str::random(6)), + 'no_invoice' => 'INV-BUKET-' . strtoupper(Str::random(6)), ]); - DB::commit(); - - $pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran untuk invoice {$transaksi->no_invoice}:\n\n" . - "*Data Pemesan:*\n" . - "Nama: {$pelanggan->nama}\n" . - "WA: {$pelanggan->no_wa}\n\n" . - "*Detail Produk:*\n" . - "Produk: {$transaksi->buket->nama}\n" . - "Total: Rp " . number_format($transaksi->buket->harga, 0, ',', '.') . "\n\n" . - "Mohon segera diproses, ya! Terima kasih."; - - $urlWA = "https://wa.me/6282337687878?text=" . urlencode($pesan); - + $urlWA = WhatsAppService::getPesananBuketMessage( + $transaksi, + $pelanggan + ); return redirect()->route('pesan.buket')->with([ 'success' => 'Pesanan Berhasil Dibuat!', 'waUrl' => $urlWA ]); } catch (\Exception $e) { DB::rollBack(); - return back()->with('error', 'Terjadi kesalahan: ' . $e->getMessage()); + return back()->with('error', 'Terjadi kesalahan: ' . + $e->getMessage()); } } }