Delete DOKUMENTASI_BACKEND_BOOKING_CUSTOMER.md
This commit is contained in:
parent
f9216b7d8e
commit
2913dad86b
|
|
@ -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
|
||||
Loading…
Reference in New Issue