check()) { return redirect()->route('dashboard'); } return view('welcome'); })->name('home'); // Auth Routes Route::middleware('guest')->group(function () { // Login Routes Route::get('/login', [LoginController::class, 'showLoginForm'])->name('login'); Route::post('/login', [LoginController::class, 'login']); // Register Routes Route::get('/register', [RegisterController::class, 'create'])->name('register'); Route::post('/register', [RegisterController::class, 'store'])->name('register.store'); // Password Reset Routes Route::get('/password/reset', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('password.request'); Route::post('/password/email', [ForgotPasswordController::class, 'sendResetLinkEmail'])->name('password.email'); Route::get('/password/reset/{token}/{email}', [ForgotPasswordController::class, 'showResetForm'])->name('password.reset'); Route::post('/password/reset', [ForgotPasswordController::class, 'reset'])->name('password.update'); }); // Dashboard Route (Public) Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); // Protected Routes Route::middleware(['auth'])->group(function () { // User Profile Routes Route::get('/profile', [UserProfileController::class, 'show'])->name('profile.show'); Route::put('/profile', [UserProfileController::class, 'update'])->name('profile.update'); // Barang Routes Route::resource('barang', BarangController::class); Route::get('/barang', [BarangController::class, 'index'])->name('barang.index'); Route::get('/barang/{barang}', [BarangController::class, 'show'])->name('barang.show'); Route::post('/barang/checkout', [BarangController::class, 'checkout'])->name('barang.checkout'); // Pesanan Routes Route::resource('pesanan', PesananController::class)->except(['destroy', 'show']); Route::get('/pesanan/{pesanan}', [PesananController::class, 'show'])->name('pesanan.show'); Route::post('/pesanan/from-cart', [PesananController::class, 'storeFromCart'])->name('pesanan.store-from-cart'); // Transaksi Routes Route::get('/transaksi/create/{pesanan}', [TransaksiController::class, 'create'])->name('transaksi.create'); Route::resource('transaksi', TransaksiController::class)->except(['create']); // Keranjang Routes Route::get('/keranjang', [KeranjangController::class, 'index'])->name('keranjang.index'); Route::post('/keranjang/tambah', [KeranjangController::class, 'tambah'])->name('keranjang.tambah'); Route::get('/keranjang/checkout', [KeranjangController::class, 'checkout'])->name('keranjang.checkout'); Route::post('/keranjang/checkout-selected', [KeranjangController::class, 'checkoutSelected'])->name('keranjang.checkout-selected'); Route::delete('/keranjang/hapus-selected', [KeranjangController::class, 'hapusSelected'])->name('keranjang.hapus-selected'); Route::put('/keranjang/{keranjang}', [KeranjangController::class, 'update'])->name('keranjang.update'); Route::delete('/keranjang/{keranjang}', [KeranjangController::class, 'hapus'])->name('keranjang.hapus'); Route::post('/keranjang/{keranjang}/delete', [KeranjangController::class, 'hapus'])->name('keranjang.hapus.post'); Route::post('/keranjang/hapus-manual', [KeranjangController::class, 'hapusManual'])->name('keranjang.hapus.manual'); Route::post('/keranjang/hapus-direct', [KeranjangController::class, 'hapusDirect'])->name('keranjang.hapus.direct'); Route::post('/keranjang/update-direct', [KeranjangController::class, 'updateDirect'])->name('keranjang.update.direct'); Route::post('/keranjang/update-fallback', [KeranjangController::class, 'updateFallback'])->name('keranjang.update.fallback'); Route::post('/keranjang/hapus-fallback', function(Request $request) { // Fallback sederhana yang dilengkapi debug \Log::debug('===== FALLBACK HAPUS ====='); \Log::debug('User ID: ' . Auth::id()); \Log::debug('Data: ' . json_encode($request->all())); if (!$request->has('id')) { return redirect()->route('keranjang.index')->with('error', 'ID tidak valid'); } try { $deleted = \DB::table('keranjang') ->where('id', $request->id) ->delete(); \Log::debug('Result: ' . ($deleted ? 'BERHASIL' : 'GAGAL')); return redirect()->route('keranjang.index') ->with('success', 'Item berhasil dihapus'); } catch (\Exception $e) { \Log::error('Error: ' . $e->getMessage()); return redirect()->route('keranjang.index') ->with('error', 'Gagal menghapus item'); } })->name('keranjang.hapus.fallback'); Route::delete('/keranjang', [KeranjangController::class, 'kosongkan'])->name('keranjang.kosongkan'); // Route fallback untuk keranjang dengan GET method (untuk mencegah error browser) Route::get('/keranjang/{id}', function($id) { // Log access dan redirect ke keranjang.index \Log::debug('Akses GET ke keranjang/{id}', ['id' => $id]); return redirect()->route('keranjang.index') ->with('error', 'Gunakan tombol di halaman untuk mengubah jumlah barang'); })->name('keranjang.fallback'); // Debug user Route::get('/debug-user', function() { if (!Auth::check()) { return response()->json(['error' => 'Tidak ada user yang login'], 401); } return response()->json([ 'user_id' => Auth::id(), 'user_name' => Auth::user()->name, 'user_email' => Auth::user()->email, 'is_authenticated' => Auth::check(), 'session_id' => session()->getId(), 'time' => now()->toDateTimeString() ]); }); // Additional Routes Route::post('/pesanan/{pesanan}/status', [PesananController::class, 'updateStatus'])->name('pesanan.status'); Route::post('/transaksi/{transaksi}/upload-bukti', [TransaksiController::class, 'uploadBukti'])->name('transaksi.upload-bukti'); Route::post('/transaksi/{transaksi}/confirm', [TransaksiController::class, 'confirmPayment'])->name('transaksi.confirm'); // Logout Route Route::post('/logout', [LoginController::class, 'logout'])->name('logout'); // User Update Address Route::post('/user/update-address', [UserController::class, 'updateAddress'])->name('user.update-address'); }); // API Routes (tanpa CSRF) Route::middleware(['auth'])->group(function () { Route::delete('/api/pesanan/{pesanan}', [PesananController::class, 'destroy'])->name('pesanan.destroy'); }); // Admin Routes Route::middleware(['auth', \App\Http\Middleware\CheckRole::class . ':admin'])->prefix('admin')->name('admin.')->group(function () { Route::get('/dashboard', [\App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard'); // Admin Users Route::get('/users', [\App\Http\Controllers\Admin\UserController::class, 'index'])->name('users.index'); Route::get('/users/create', [\App\Http\Controllers\Admin\UserController::class, 'create'])->name('users.create'); Route::post('/users', [\App\Http\Controllers\Admin\UserController::class, 'store'])->name('users.store'); Route::get('/users/{user}', [\App\Http\Controllers\Admin\UserController::class, 'show'])->name('users.show'); Route::get('/users/{user}/edit', [\App\Http\Controllers\Admin\UserController::class, 'edit'])->name('users.edit'); Route::put('/users/{user}', [\App\Http\Controllers\Admin\UserController::class, 'update'])->name('users.update'); Route::delete('/users/{user}', [\App\Http\Controllers\Admin\UserController::class, 'destroy'])->name('users.destroy'); // Admin Barang Route::get('/barang', [\App\Http\Controllers\Admin\BarangController::class, 'index'])->name('barang.index'); Route::get('/barang/create', [\App\Http\Controllers\Admin\BarangController::class, 'create'])->name('barang.create'); Route::post('/barang', [\App\Http\Controllers\Admin\BarangController::class, 'store'])->name('barang.store'); Route::get('/barang/{barang}', [\App\Http\Controllers\Admin\BarangController::class, 'show'])->name('barang.show'); Route::get('/barang/{barang}/edit', [\App\Http\Controllers\Admin\BarangController::class, 'edit'])->name('barang.edit'); Route::put('/barang/{barang}', [\App\Http\Controllers\Admin\BarangController::class, 'update'])->name('barang.update'); Route::delete('/barang/{barang}', [\App\Http\Controllers\Admin\BarangController::class, 'destroy'])->name('barang.destroy'); // Admin Pesanan Route::get('/pesanan', [\App\Http\Controllers\Admin\PesananController::class, 'index'])->name('pesanan.index'); Route::get('/pesanan/{pesanan}', [\App\Http\Controllers\Admin\PesananController::class, 'show'])->name('pesanan.show'); Route::post('/pesanan/{pesanan}/status', [\App\Http\Controllers\Admin\PesananController::class, 'updateStatus'])->name('pesanan.status'); // Admin Transaksi Route::get('/transaksi', [\App\Http\Controllers\Admin\TransaksiController::class, 'index'])->name('transaksi.index'); Route::get('/transaksi/{transaksi}', [\App\Http\Controllers\Admin\TransaksiController::class, 'show'])->name('transaksi.show'); Route::put('/transaksi/{transaksi}/status', [\App\Http\Controllers\Admin\TransaksiController::class, 'updateStatus'])->name('transaksi.status'); // Admin Laporan Route::get('/laporan', [\App\Http\Controllers\Admin\LaporanController::class, 'index'])->name('laporan.index'); Route::get('/laporan/generate', [\App\Http\Controllers\Admin\LaporanController::class, 'generate'])->name('laporan.generate'); Route::get('/laporan/penjualan', [\App\Http\Controllers\Admin\LaporanController::class, 'penjualan'])->name('laporan.penjualan'); Route::get('/laporan/stok', [\App\Http\Controllers\Admin\LaporanController::class, 'stok'])->name('laporan.stok'); Route::get('/laporan/transaksi', [\App\Http\Controllers\Admin\LaporanController::class, 'transaksi'])->name('laporan.transaksi'); Route::post('/laporan/download', [\App\Http\Controllers\Admin\LaporanController::class, 'download'])->name('laporan.download'); // Admin Banner Route::resource('/banners', \App\Http\Controllers\Admin\BannerController::class); Route::post('/banners/{banner}/toggle', [\App\Http\Controllers\Admin\BannerController::class, 'toggleStatus'])->name('banners.toggle'); Route::post('/banners/{banner}/move-up', [\App\Http\Controllers\Admin\BannerController::class, 'moveUp'])->name('banners.move-up'); Route::post('/banners/{banner}/move-down', [\App\Http\Controllers\Admin\BannerController::class, 'moveDown'])->name('banners.move-down'); // Admin Flash Sale Route::resource('/flash-sales', \App\Http\Controllers\Admin\FlashSaleController::class); Route::post('/flash-sales/{flashSale}/toggle', [\App\Http\Controllers\Admin\FlashSaleController::class, 'toggleStatus'])->name('flash-sales.toggle'); Route::get('/flash-sales/{flashSale}/items', [\App\Http\Controllers\Admin\FlashSaleController::class, 'showItems'])->name('flash-sales.items'); Route::post('/flash-sales/{flashSale}/items', [\App\Http\Controllers\Admin\FlashSaleController::class, 'storeItem'])->name('flash-sales.items.store'); Route::put('/flash-sales/items/{flashSaleItem}', [\App\Http\Controllers\Admin\FlashSaleController::class, 'updateItem'])->name('flash-sales.items.update'); Route::delete('/flash-sales/items/{flashSaleItem}', [\App\Http\Controllers\Admin\FlashSaleController::class, 'destroyItem'])->name('flash-sales.items.destroy'); Route::get('/flash-sales/items/{flashSaleItem}/data', [\App\Http\Controllers\Admin\FlashSaleController::class, 'getItemData'])->name('flash-sales.items.data'); // Pesanan routes Route::get('pesanan/cetak-resi/{pesanan}', [\App\Http\Controllers\Admin\PesananController::class, 'cetakResi'])->name('pesanan.cetak-resi'); }); Route::delete('/pesanan/{pesanan}', [PesananController::class, 'destroy'])->name('pesanan.destroy'); // Route untuk Midtrans Route::post('/transaksi/create/{pesanan}', [TransaksiController::class, 'create'])->name('transaksi.create'); Route::post('/transaksi/get-snap-token/{pesanan}', [TransaksiController::class, 'getSnapToken'])->name('transaksi.get-snap-token'); Route::post('/transaksi/callback', [TransaksiController::class, 'callback'])->name('transaksi.callback'); Route::get('/transaksi/finish', [TransaksiController::class, 'finish'])->name('transaksi.finish'); Route::get('/transaksi/unfinish', [TransaksiController::class, 'unfinish'])->name('transaksi.unfinish'); Route::get('/transaksi/error', [TransaksiController::class, 'error'])->name('transaksi.error'); Route::post('/transaksi/update-status', [TransaksiController::class, 'updateStatus'])->name('transaksi.update-status'); // Email Verification Routes Route::get('/email/verify', [App\Http\Controllers\Auth\VerificationController::class, 'show']) ->middleware('auth') ->name('verification.notice'); Route::get('/email/verify/{token}', [App\Http\Controllers\Auth\VerificationController::class, 'verify']) ->name('verification.verify'); Route::post('/email/verification-notification', [App\Http\Controllers\Auth\VerificationController::class, 'resend']) ->middleware(['auth', 'throttle:6,1']) ->name('verification.send'); // Location Routes Route::get('/provinces', [LocationController::class, 'getProvinces'])->name('provinces'); Route::get('/cities', [LocationController::class, 'getCities'])->name('cities'); Route::post('/calculate-cost', [LocationController::class, 'calculateCost'])->name('calculate-cost'); // Layanan Pelanggan Routes Route::get('/bantuan', function () { return view('layanan.bantuan'); })->name('bantuan'); Route::get('/cara-pembelian', function () { return view('layanan.cara-pembelian'); })->name('cara-pembelian'); Route::get('/pengiriman', function () { return view('layanan.pengiriman'); })->name('pengiriman'); Route::get('/barang', [BarangController::class, 'index'])->name('barang.index');