66 lines
2.2 KiB
PHP
66 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Review;
|
|
use App\Models\Booking;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class ReviewController extends Controller
|
|
{
|
|
/**
|
|
* Menyimpan ulasan baru ke dalam database.
|
|
*/
|
|
public function create(Booking $booking)
|
|
{
|
|
// Otorisasi: Pastikan user yang login adalah pemilik booking
|
|
if ($booking->user_id !== Auth::id()) {
|
|
abort(403, 'Akses tidak diizinkan.');
|
|
}
|
|
|
|
// Otorisasi: Pastikan booking sudah pernah diulas atau belum
|
|
if ($booking->review) {
|
|
return redirect()->route('booking.history')->with('error', 'Anda sudah pernah memberikan ulasan untuk booking ini.');
|
|
}
|
|
|
|
// Muat relasi yang diperlukan untuk ditampilkan di view
|
|
$booking->load('table.venue');
|
|
|
|
return view('reviews.create', compact('booking'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
// 1. Validasi Input
|
|
$request->validate([
|
|
'booking_id' => 'required|exists:bookings,id|unique:reviews,booking_id',
|
|
'rating' => 'required|integer|min:1|max:5',
|
|
'comment' => 'required|string|max:2000',
|
|
], [
|
|
'booking_id.unique' => 'Anda sudah pernah memberikan ulasan untuk booking ini.',
|
|
'rating.required' => 'Rating bintang wajib diisi.',
|
|
'comment.required' => 'Komentar ulasan wajib diisi.',
|
|
]);
|
|
|
|
// 2. Cek Otorisasi
|
|
$booking = Booking::find($request->booking_id);
|
|
|
|
// Pastikan user yang login adalah pemilik booking tersebut
|
|
if ($booking->user_id !== Auth::id()) {
|
|
return redirect()->back()->with('error', 'Akses tidak diizinkan.');
|
|
}
|
|
|
|
// 3. Simpan Ulasan
|
|
Review::create([
|
|
'user_id' => Auth::id(),
|
|
'venue_id' => $booking->table->venue_id, // Ambil venue_id dari relasi
|
|
'booking_id' => $booking->id,
|
|
'rating' => $request->rating,
|
|
'comment' => $request->comment,
|
|
]);
|
|
|
|
// 4. Redirect dengan Pesan Sukses
|
|
return redirect()->route('booking.history')->with('success', 'Terima kasih atas ulasan Anda!');
|
|
}
|
|
} |