MIF_E31220412/routes/web.php

189 lines
10 KiB
PHP

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\DashboardController;
use App\Http\Controllers\PenggunaController;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\BarangController;
use App\Http\Controllers\PaketController;
use App\Http\Controllers\SewaController;
use App\Http\Controllers\RiwayatController;
use App\Http\Controllers\StockController;
use App\Http\Controllers\PaketBarangController;
use App\Http\Controllers\Auth\RegisterController;
use App\Http\Controllers\ChatController;
use App\Http\Controllers\OngkirKotaController;
use App\Http\Controllers\ContactInfoController;
use App\Http\Controllers\ProfileController;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
// Route untuk halaman welcome
Route::get('/', function () {
$pakets = \App\Models\Paket::where('status', 'aktif')->get();
return view('welcome', compact('pakets'));
});
// Route untuk proses sewa dari landing page
Route::get('/sewa-paket/{id}', [SewaController::class, 'create'])->name('sewa.paket');
// Route untuk Authentication (untuk guest)
Route::middleware('guest')->group(function () {
Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login');
Route::post('/login', [AuthController::class, 'login'])->name('login.post');
Route::get('/register', [AuthController::class, 'showRegisterForm'])->name('register');
Route::post('/register', [AuthController::class, 'register'])->name('register.post');
});
// Route untuk logout
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
// Route yang membutuhkan autentikasi
Route::middleware(['auth'])->group(function () {
// Dashboard
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
// Profile
Route::get('/profile', [ProfileController::class, 'index'])->name('profile.index');
Route::put('/profile', [ProfileController::class, 'update'])->name('profile.update');
// Pengguna
Route::get('/pengguna', [PenggunaController::class, 'index'])->name('pengguna');
Route::get('/pengguna/tambah', [PenggunaController::class, 'create'])->name('pengguna.create');
Route::post('/pengguna', [PenggunaController::class, 'store'])->name('pengguna.store');
Route::delete('/pengguna/{id}', [PenggunaController::class, 'destroy'])->name('pengguna.destroy');
// Admin
Route::get('/admin', [AdminController::class, 'index'])->name('admin');
Route::get('/admin/tambah', [AdminController::class, 'create'])->name('admin.create');
Route::post('/admin', [AdminController::class, 'store'])->name('admin.store');
Route::get('/admin/{id}/edit', [AdminController::class, 'edit'])->name('admin.edit');
Route::put('/admin/{id}', [AdminController::class, 'update'])->name('admin.update');
Route::delete('/admin/{id}', [AdminController::class, 'destroy'])->name('admin.destroy');
// Barang
Route::get('/barang', [BarangController::class, 'index'])->name('barang');
Route::get('/barang/tambah', [BarangController::class, 'create'])->name('barang.create');
Route::post('/barang', [BarangController::class, 'store'])->name('barang.store');
Route::get('/barang/{id}/edit', [BarangController::class, 'edit'])->name('barang.edit');
Route::put('/barang/{id}', [BarangController::class, 'update'])->name('barang.update');
Route::delete('/barang/{id}', [BarangController::class, 'destroy'])->name('barang.destroy');
// Paket (untuk semua user)
Route::get('/paket', [PaketController::class, 'index'])->name('paket');
// Khusus Admin
Route::middleware(['admin'])->group(function () {
// Paket Management
Route::get('/paket/tambah', [PaketController::class, 'create'])->name('paket.create');
Route::post('/paket', [PaketController::class, 'store'])->name('paket.store');
Route::get('/paket/{id}/edit', [PaketController::class, 'edit'])->name('paket.edit');
Route::put('/paket/{id}', [PaketController::class, 'update'])->name('paket.update');
Route::delete('/paket/{id}', [PaketController::class, 'destroy'])->name('paket.destroy');
Route::post('/paket/{id}/activate', [PaketController::class, 'activate'])->name('paket.activate');
Route::post('/paket/{id}/activate-all', [PaketController::class, 'activateAll'])->name('paket.activate-all');
});
// Input Stock
Route::get('/input-stock', [StockController::class, 'index'])->name('input-stock');
Route::post('/input-stock', [StockController::class, 'store'])->name('input-stock.store');
Route::get('/input-stock/{id}/edit', [StockController::class, 'edit'])->name('input-stock.edit');
Route::put('/input-stock/{id}', [StockController::class, 'update'])->name('input-stock.update');
Route::get('/input-stock/{id}/kelola-barang', [StockController::class, 'kelolaBarang'])->name('input-stock.kelola-barang');
Route::get('/input-stock/{id}/barang', [StockController::class, 'getBarangPaket'])->name('input-stock.barang');
Route::post('/input-stock/{id}/barang', [StockController::class, 'tambahBarang'])->name('input-stock.tambah-barang');
Route::delete('/input-stock/{paketId}/barang/{barangId}', [StockController::class, 'hapusBarang'])->name('input-stock.hapus-barang');
// PaketBarang
Route::put('/paket-barang/{id}', [PaketBarangController::class, 'update'])->name('paket-barang.update');
Route::delete('/paket-barang/{id}', [PaketBarangController::class, 'destroy'])->name('paket-barang.destroy');
// Sewa
Route::get('/sewa', [SewaController::class, 'index'])->name('sewa');
Route::get('/sewa/riwayat', [SewaController::class, 'riwayat'])->name('sewa.riwayat');
Route::get('/sewa/{id}/detail', [SewaController::class, 'detail'])->name('sewa.detail');
Route::get('/sewa/create/{id}', [SewaController::class, 'create'])->name('sewa.create');
Route::post('/sewa', [SewaController::class, 'store'])->name('sewa.store');
Route::get('/sewa/{id}', [SewaController::class, 'show'])->name('sewa.show');
Route::post('/sewa/{id}/upload-bukti', [SewaController::class, 'uploadBukti'])->name('sewa.upload-bukti');
Route::post('/sewa/{id}/upload-jaminan', [SewaController::class, 'uploadJaminan'])->name('sewa.upload-jaminan');
Route::post('/sewa/{id}/batal', [SewaController::class, 'batal'])->name('sewa.batal');
// Riwayat
Route::get('/riwayat', [RiwayatController::class, 'index'])->name('riwayat');
Route::get('/riwayat/{id}', [RiwayatController::class, 'show'])->name('riwayat.show');
Route::put('/riwayat/{id}/batal', [RiwayatController::class, 'cancel'])->name('riwayat.batal');
// Admin Riwayat
Route::prefix('admin')->name('admin.')->group(function () {
Route::get('/riwayat', [RiwayatController::class, 'adminIndex'])->name('riwayat');
Route::put('/riwayat/{id}/status', [RiwayatController::class, 'updateStatus'])->name('riwayat.status');
// Verifikasi Pembayaran
Route::get('/verifikasi', [App\Http\Controllers\Admin\VerifikasiController::class, 'index'])->name('verifikasi.index');
Route::post('/verifikasi/{id}/approve', [App\Http\Controllers\Admin\VerifikasiController::class, 'approve'])->name('verifikasi.approve');
Route::post('/verifikasi/{id}/reject', [App\Http\Controllers\Admin\VerifikasiController::class, 'reject'])->name('verifikasi.reject');
});
// Chat Routes
Route::get('/chat/unread-count', [ChatController::class, 'getUnreadCount'])->name('chat.unreadCount');
Route::get('/chat', [ChatController::class, 'index'])->name('chat.index');
Route::get('/chat/{user_id}/messages', [ChatController::class, 'getNewMessages'])->name('chat.messages');
Route::get('/chat/{user_id}', [ChatController::class, 'show'])->name('chat.show');
Route::post('/chat/{user_id}', [ChatController::class, 'store'])->name('chat.store');
Route::post('/chat/{user_id}/mark-as-read', [ChatController::class, 'markAsRead'])->name('chat.markAsRead');
});
// Reroute dari dashboard/users ke pengguna
Route::get('/dashboard/users', function () {
return redirect()->route('pengguna');
})->name('dashboard.users');
// Admin Routes
Route::middleware(['auth', 'role:admin'])->prefix('admin')->group(function () {
Route::get('/dashboard', [App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('admin.dashboard');
// ... other admin routes ...
});
// Customer Routes
Route::middleware(['auth', 'role:customer'])->prefix('customer')->group(function () {
Route::get('/dashboard', [App\Http\Controllers\Customer\DashboardController::class, 'index'])->name('customer.dashboard');
// Paket - hanya view
Route::get('/paket', [PaketController::class, 'index'])->name('customer.paket');
// Sewa
Route::get('/sewa', [SewaController::class, 'index'])->name('customer.sewa');
Route::get('/sewa/create/{id}', [SewaController::class, 'create'])->name('customer.sewa.create');
Route::post('/sewa', [SewaController::class, 'store'])->name('customer.sewa.store');
Route::get('/sewa/{id}', [SewaController::class, 'show'])->name('customer.sewa.show');
Route::post('/sewa/{id}/upload-bukti', [SewaController::class, 'uploadBukti'])->name('customer.sewa.upload-bukti');
// Riwayat
Route::get('/riwayat', [RiwayatController::class, 'index'])->name('customer.riwayat');
Route::get('/riwayat/{id}', [RiwayatController::class, 'show'])->name('customer.riwayat.show');
Route::put('/riwayat/{id}/cancel', [RiwayatController::class, 'cancel'])->name('customer.riwayat.cancel');
});
// Routes untuk manajemen ongkir kota (admin only)
Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(function () {
Route::resource('ongkir-kota', OngkirKotaController::class);
});
// Routes untuk Hubungi Kami
Route::get('/contact', [ContactInfoController::class, 'show'])->name('contact.show');
Route::middleware(['auth', 'admin'])->group(function () {
Route::get('/admin/contact', [ContactInfoController::class, 'index'])->name('contact.index');
Route::post('/admin/contact', [ContactInfoController::class, 'store'])->name('contact.store');
});