From 2913dad86b840dc9a9663d3a16d7daa73ab26160 Mon Sep 17 00:00:00 2001 From: Rina Date: Thu, 16 Jul 2026 10:56:59 +0700 Subject: [PATCH] Delete DOKUMENTASI_BACKEND_BOOKING_CUSTOMER.md --- DOKUMENTASI_BACKEND_BOOKING_CUSTOMER.md | 308 ------------------------ 1 file changed, 308 deletions(-) delete mode 100644 DOKUMENTASI_BACKEND_BOOKING_CUSTOMER.md diff --git a/DOKUMENTASI_BACKEND_BOOKING_CUSTOMER.md b/DOKUMENTASI_BACKEND_BOOKING_CUSTOMER.md deleted file mode 100644 index 07b10f4..0000000 --- a/DOKUMENTASI_BACKEND_BOOKING_CUSTOMER.md +++ /dev/null @@ -1,308 +0,0 @@ -# Dokumentasi Backend Booking Customer - -Dokumentasi ini menjelaskan tahap 4 backend yang sudah dibuat untuk **booking customer** pada website rental kendaraan berbasis Laravel. - -## Tujuan Fitur - -Tahap ini dibuat agar customer bisa melakukan booking kendaraan secara valid menggunakan data nyata dari database. - -Fokus fitur ini: - -- hanya customer login yang boleh booking -- kendaraan yang dibooking harus valid dan layak tampil -- customer mengisi data booking melalui form frontend yang sudah ada -- sistem memvalidasi data booking secara backend -- sistem mengecek bentrok tanggal booking kendaraan -- booking yang valid disimpan ke database -- payment awal dibuat otomatis dengan status unpaid -- booking diarahkan ke langkah pembayaran placeholder - -## Aturan Bisnis yang Diterapkan - -Aturan yang wajib dipatuhi: - -- customer wajib login sebelum booking -- rental yang belum diverifikasi tidak boleh dibooking -- kendaraan dengan status selain `active` tidak boleh dibooking -- satu kendaraan tidak boleh dibooking pada tanggal yang sama jika booking aktif masih memblokir -- customer hanya boleh booking kendaraan dari rental dengan status `approved` -- backend pembayaran penuh belum dibuat di tahap ini -- review belum dibuat di tahap ini - -Status booking yang dianggap memblokir kendaraan: - -- `pending` -- `waiting_payment` -- `waiting_verification` -- `confirmed` -- `ongoing` - -Status yang tidak memblokir: - -- `cancelled` -- `completed` - -## Route yang Dibuat - -Route booking customer yang digunakan: - -- `GET /booking/{vehicle:slug}` → `booking.create` -- `POST /booking/{vehicle:slug}` → `booking.store` - -Catatan: -- route booking hanya tersedia untuk user dengan role `customer` -- guest diarahkan ke login -- admin rental dan super admin tidak masuk flow booking customer -- route booking lama yang umum tanpa slug tidak dipakai untuk create flow - -## File Backend yang Ditambahkan - -### Controller -- `app/Http/Controllers/Customer/BookingController.php` - -### Form Request -- `app/Http/Requests/StoreBookingRequest.php` - -### Model yang Disesuaikan -- `app/Models/Booking.php` -- `app/Models/Payment.php` -- `app/Models/Vehicle.php` -- `app/Models/RentalCompany.php` - -### Route Update -- `routes/web.php` - -## Alur Booking Customer - -### 1. Tombol Booking dari Detail Mobil - -- Tombol `Booking Sekarang` di detail mobil diarahkan ke route `booking.create`. -- Jika guest klik tombol ini, sistem mengarah ke halaman login. -- Jika user login bukan customer, sistem diarahkan ke home sebagai langkah aman. - -### 2. Halaman Booking - -- Customer membuka halaman booking berdasarkan slug kendaraan. -- Controller memuat data kendaraan beserta rental company dan foto kendaraan. -- Sistem mengecek bahwa: - - kendaraan berstatus `active` - - rental company berstatus `approved` -- Jika tidak valid, sistem mengembalikan `404`. - -### 3. Form Data Penyewa - -Field yang dipakai dari form booking: - -- nama lengkap -- email -- nomor HP -- alamat -- nomor KTP -- nomor SIM -- catatan tambahan - -Prefill yang dipakai: - -- `customer_name` dari nama user login -- `customer_email` dari email user login -- `customer_phone` dari nomor HP user login jika ada - -Jika tidak ada customer profile tambahan, data tetap diambil dari `users` dan input form yang tersedia. - -### 4. Detail Pemesanan - -Field booking yang diproses: - -- pickup_date -- return_date -- pickup_time nullable -- pickup_location -- return_location nullable -- with_driver boolean -- note nullable - -Logika yang diterapkan: - -- `pickup_date` wajib -- `return_date` wajib -- `return_date` harus lebih besar atau sama dengan `pickup_date` -- `pickup_date` tidak boleh di masa lalu -- duration dihitung otomatis di backend -- subtotal dihitung otomatis dari duration dan harga kendaraan per hari -- discount_amount sementara `0` -- additional_cost sementara `0` -- total_amount dihitung ulang di backend - -## Validasi Booking - -Validasi utama yang dipakai di `StoreBookingRequest`: - -- `customer_name` wajib -- `customer_email` wajib dan format email valid -- `customer_phone` wajib -- `customer_address` wajib -- `identity_number` wajib -- `driver_license_number` nullable -- `pickup_date` wajib dan minimal hari ini -- `return_date` wajib dan tidak boleh lebih kecil dari `pickup_date` -- `pickup_location` wajib -- `pickup_time` nullable dengan format jam yang valid -- `with_driver` boolean -- `note` nullable - -Catatan: -- nilai harga, subtotal, total, dan durasi tidak diambil dari frontend -- semua perhitungan harga dihitung ulang di backend - -## Logika Bentrok Tanggal - -Sebelum booking disimpan, sistem mengecek apakah kendaraan sudah dibooking pada rentang tanggal yang sama. - -Logika overlap yang dipakai: - -- cek booking lain dengan `vehicle_id` yang sama -- cek booking yang statusnya masih memblokir kendaraan -- overlap dianggap terjadi jika: - - tanggal mulai booking baru berada di dalam rentang booking lama - - tanggal selesai booking baru berada di dalam rentang booking lama - - booking baru sepenuhnya mencakup booking lama - -Jika bentrok ditemukan: - -- sistem mengembalikan user ke form booking -- sistem menampilkan error bahwa kendaraan tidak tersedia pada rentang tanggal tersebut - -## Booking Code - -Booking code dibuat otomatis dengan format: - -- `BK-YYYYMMDD-XXXXXX` - -Contoh: - -- `BK-20260421-A1B2C3` - -Aturan yang dipakai: - -- memakai prefix `BK` -- memakai tanggal hari ini -- memakai random string kapital 6 karakter -- dicek ke database agar unik sebelum dipakai - -## Penyimpanan Booking - -Jika data valid dan tidak bentrok, sistem menyimpan record booking ke tabel `bookings` dengan data: - -- booking_code unik -- customer_id dari user login -- rental_company_id dari vehicle -- vehicle_id dari kendaraan yang dipilih -- pickup_date -- return_date -- pickup_time -- pickup_location -- return_location -- duration_days -- with_driver -- customer_name -- customer_email -- customer_phone -- customer_address -- identity_number -- driver_license_number -- note -- subtotal -- discount_amount -- additional_cost -- total_amount -- booking_status = `waiting_payment` -- payment_status = `unpaid` - -## Pembuatan Payment Awal - -Setelah booking berhasil dibuat, sistem otomatis membuat data payment awal di tabel `payments`. - -Nilai yang disimpan: - -- booking_id -- payment_method = `manual_transfer` -- amount = total_amount -- payment_status = `unpaid` -- proof_payment = null -- paid_at = null -- verified_by = null -- verified_at = null - -Keputusan ini dipakai karena backend pembayaran penuh belum dibangun, tetapi relasi booking-payment sudah disiapkan dari awal. - -## Redirect Setelah Booking Berhasil - -Setelah booking berhasil disimpan: - -- user diarahkan ke halaman pembayaran placeholder -- notifikasi sukses dikirim ke session - -Pendekatan ini dipilih karena paling aman dan paling mudah dikembangkan ke tahap pembayaran berikutnya. - -## Partial Blade yang Dipakai - -### Booking -- `resources/views/booking/index.blade.php` -- `resources/views/booking/data-kendaraan.blade.php` -- `resources/views/booking/form-data-penyewa.blade.php` -- `resources/views/booking/detail-pemesanan.blade.php` -- `resources/views/booking/promo-voucher.blade.php` -- `resources/views/booking/ringkasan-biaya.blade.php` -- `resources/views/booking/tombol-lanjut-pembayaran.blade.php` - -### Detail Mobil -- `resources/views/detail-mobil/tombol-booking.blade.php` - -## Penyesuaian Frontend - -Frontend booking yang sudah ada tetap dipakai, hanya disambungkan ke backend nyata. - -Penyesuaian utama: - -- data kendaraan diambil dari vehicle yang dipilih -- data customer login dipakai sebagai default form penyewa -- ringkasan biaya dihitung ulang berdasarkan backend logic -- tombol lanjut pembayaran diubah menjadi tombol submit booking -- promo voucher tetap placeholder karena backend promo belum ada - -## Keamanan dan Performa - -- flow booking dilindungi middleware `auth` dan `role:customer` -- vehicle divalidasi dengan route model binding `vehicle:slug` -- kendaraan tidak valid diblok dengan `404` -- query bentrok memakai filter status yang jelas -- booking code dicek unik sebelum disimpan -- harga tidak pernah dipercaya dari frontend -- data payment awal selalu dibuat dari transaksi booking yang sama - -## Status Pengerjaan - -- customer bisa membuka halaman booking dari detail mobil -- guest diarahkan ke login -- hanya customer login yang bisa akses booking -- validasi booking backend sudah aktif -- cek bentrok tanggal sudah aktif -- booking dan payment awal sudah tersimpan otomatis -- pembayaran penuh, upload bukti bayar, dan review masih belum dibuat - -## Langkah Menjalankan - -1. Pastikan data rental company berstatus `approved` tersedia. -2. Pastikan kendaraan berstatus `active` tersedia. -3. Buka halaman detail mobil dari katalog. -4. Klik tombol booking untuk masuk ke halaman booking. -5. Isi form booking lalu simpan. - -## Langkah Berikutnya - -Tahap backend berikutnya yang paling masuk akal: - -1. membangun backend pembayaran customer -2. menambahkan upload bukti bayar dan verifikasi admin rental -3. menambahkan halaman detail booking customer -4. menambahkan review setelah booking selesai