group(function () { Route::get('login', [LoginController::class, 'show'])->name('login'); Route::post('login', [LoginController::class, 'login']); }); Route::post('logout', [LoginController::class, 'logout'])->middleware('auth')->name('logout'); Route::get('/', fn () => redirect()->route('dashboard')); Route::middleware('auth')->group(function () { Route::get('dashboard', [DashboardController::class, 'index'])->name('dashboard'); // ---- Profil sendiri (semua pengguna) ---- Route::get('profil', [ProfileController::class, 'edit'])->name('profile.edit'); Route::put('profil', [ProfileController::class, 'update'])->name('profile.update'); Route::put('profil/kata-laluan', [ProfileController::class, 'updatePassword'])->name('profile.password'); // ---- Kaunter Kehadiran (admin + petugas kaunter) ---- Route::middleware('role:' . User::ROLE_ADMIN . '|' . User::ROLE_KAUNTER)->group(function () { Route::get('kaunter', [CounterController::class, 'index'])->name('counter.index'); Route::get('kaunter/cari', [CounterController::class, 'search'])->name('counter.search'); Route::post('kaunter/hadir', [CounterController::class, 'store'])->name('counter.store'); Route::get('kehadiran', [AttendanceController::class, 'index'])->name('attendance.index'); }); // ---- Modul Cabutan + Laporan (admin + petugas cabutan/urusetia) ---- Route::middleware('role:' . User::ROLE_ADMIN . '|' . User::ROLE_CABUTAN)->group(function () { Route::get('cabutan', [DrawController::class, 'index'])->name('draw.index'); Route::get('cabutan/pool', [DrawController::class, 'pool'])->name('draw.pool'); Route::post('cabutan/spin', [DrawController::class, 'spin'])->name('draw.spin'); Route::post('cabutan/confirm', [DrawController::class, 'confirm'])->name('draw.confirm'); Route::post('cabutan/batal', [DrawController::class, 'cancel'])->name('draw.cancel'); Route::get('laporan', [ReportController::class, 'index'])->name('reports.index'); Route::get('laporan/export/{type}', [ReportController::class, 'export'])->name('reports.export'); }); // ---- Admin sahaja ---- Route::middleware('role:' . User::ROLE_ADMIN)->prefix('admin')->name('admin.')->group(function () { Route::get('anggota', [MemberController::class, 'index'])->name('members.index'); Route::get('anggota/import', [MemberController::class, 'showImport'])->name('members.import'); Route::post('anggota/import', [MemberController::class, 'import'])->name('members.import.store'); Route::get('anggota/{member}/edit', [MemberController::class, 'edit'])->name('members.edit'); Route::put('anggota/{member}', [MemberController::class, 'update'])->name('members.update'); Route::delete('anggota/{member}', [MemberController::class, 'destroy'])->name('members.destroy'); Route::get('hadiah', [PrizeController::class, 'index'])->name('prizes.index'); Route::get('hadiah/import', [PrizeController::class, 'showImport'])->name('prizes.import'); Route::post('hadiah/import', [PrizeController::class, 'import'])->name('prizes.import.store'); Route::get('hadiah/{prize}/edit', [PrizeController::class, 'edit'])->name('prizes.edit'); Route::put('hadiah/{prize}', [PrizeController::class, 'update'])->name('prizes.update'); Route::delete('hadiah/{prize}', [PrizeController::class, 'destroy'])->name('prizes.destroy'); Route::get('tetapan', [SettingController::class, 'index'])->name('settings.index'); Route::put('tetapan/sesi', [SettingController::class, 'updateSession'])->name('settings.session'); Route::post('tetapan/reset', [SettingController::class, 'reset'])->name('settings.reset'); Route::get('audit', [AuditController::class, 'index'])->name('audit.index'); // ---- Urus Pengguna ---- Route::get('pengguna', [UserController::class, 'index'])->name('users.index'); Route::get('pengguna/cipta', [UserController::class, 'create'])->name('users.create'); Route::post('pengguna', [UserController::class, 'store'])->name('users.store'); Route::get('pengguna/{user}/edit', [UserController::class, 'edit'])->name('users.edit'); Route::put('pengguna/{user}', [UserController::class, 'update'])->name('users.update'); Route::delete('pengguna/{user}', [UserController::class, 'destroy'])->name('users.destroy'); }); });