248 lines
15 KiB
PHP
248 lines
15 KiB
PHP
<?php
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use App\Http\Controllers\Auth\LoginController;
|
|
use App\Http\Controllers\Auth\RegisterController;
|
|
use App\Http\Controllers\Auth\ForgotPasswordController;
|
|
use App\Http\Controllers\DashboardController;
|
|
use App\Http\Controllers\BarangController;
|
|
use App\Http\Controllers\PesananController;
|
|
use App\Http\Controllers\TransaksiController;
|
|
use App\Http\Controllers\UserProfileController;
|
|
use App\Http\Controllers\KeranjangController;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\UserController;
|
|
use Illuminate\Auth\Events\Verified;
|
|
use App\Http\Controllers\LocationController;
|
|
|
|
// Redirect root ke dashboard
|
|
Route::get('/', function () {
|
|
if (auth()->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'); |