Delete DOKUMENTASI_BACKEND_BOOKING_CUSTOMER.md

This commit is contained in:
Rina 2026-07-16 10:56:59 +07:00
parent f9216b7d8e
commit 2913dad86b
1 changed files with 0 additions and 308 deletions

View File

@ -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