name('home'); Route::middleware('guest')->group(function (): void { Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login'); Route::post('/login', [AuthController::class, 'login'])->name('login.attempt'); Route::get('/register', [AuthController::class, 'showRegisterForm'])->name('register'); Route::post('/register', [AuthController::class, 'register'])->name('register.store'); }); Route::post('/logout', [AuthController::class, 'logout']) ->middleware('auth') ->name('logout'); Route::middleware('auth')->group(function (): void { Route::get('/dashboard', [AuthController::class, 'redirectDashboard'])->name('dashboard.redirect'); Route::post('/notifications/read-all', [NotificationController::class, 'readAll'])->name('notifications.read-all'); Route::post('/notifications/{notificationId}/read', [NotificationController::class, 'readOne'])->name('notifications.read-one'); Route::get('/proposal/{kegiatan}/download', function (\App\Models\Kegiatan $kegiatan) { $path = $kegiatan->proposal; if (! $path || ! Storage::disk('public')->exists($path)) { abort(404); } $fullPath = Storage::disk('public')->path($path); return response()->file($fullPath); })->name('proposal.download'); }); Route::middleware(['auth', 'role:admin'])->group(function (): void { Route::get('/admin/dashboard', AdminDashboardController::class)->name('admin.dashboard'); Route::get('/admin/profil', AdminProfilController::class)->name('admin.profil'); Route::put('/admin/profil', [AdminProfilController::class, 'update'])->name('admin.profil.update'); Route::get('/admin/users', AdminUserController::class)->name('admin.users'); Route::post('/admin/users', [AdminUserController::class, 'store'])->name('admin.users.store'); Route::put('/admin/users/{user}', [AdminUserController::class, 'update'])->name('admin.users.update'); Route::delete('/admin/users/{user}', [AdminUserController::class, 'destroy'])->name('admin.users.destroy'); Route::get('/admin/organisasi', AdminOrganisasiController::class)->name('admin.organisasi'); Route::post('/admin/organisasi', [AdminOrganisasiController::class, 'store'])->name('admin.organisasi.store'); Route::put('/admin/organisasi/{organisasi}', [AdminOrganisasiController::class, 'update'])->name('admin.organisasi.update'); Route::delete('/admin/organisasi/{organisasi}', [AdminOrganisasiController::class, 'destroy'])->name('admin.organisasi.destroy'); Route::get('/admin/kegiatan', KegiatanController::class)->name('admin.kegiatan'); Route::post('/admin/kegiatan', [KegiatanController::class, 'store'])->name('admin.kegiatan.store'); Route::put('/admin/kegiatan/{kegiatan}', [KegiatanController::class, 'update'])->name('admin.kegiatan.update'); Route::delete('/admin/kegiatan/{kegiatan}', [KegiatanController::class, 'destroy'])->name('admin.kegiatan.destroy'); Route::get('/admin/validasi', ValidasiController::class)->name('admin.validasi'); Route::post('/admin/validasi/{kegiatan}/approve', [ValidasiController::class, 'approve'])->name('admin.validasi.approve'); Route::post('/admin/validasi/{kegiatan}/reject', [ValidasiController::class, 'reject'])->name('admin.validasi.reject'); Route::get('/admin/dokumentasi', DokumentasiController::class)->name('admin.dokumentasi'); Route::post('/admin/dokumentasi', [DokumentasiController::class, 'store'])->name('admin.dokumentasi.store'); Route::put('/admin/dokumentasi/{dokumentasi}', [DokumentasiController::class, 'update'])->name('admin.dokumentasi.update'); Route::delete('/admin/dokumentasi/{dokumentasi}', [DokumentasiController::class, 'destroy'])->name('admin.dokumentasi.destroy'); Route::get('/admin/laporan', LaporanController::class)->name('admin.laporan'); Route::post('/admin/laporan', [LaporanController::class, 'store'])->name('admin.laporan.store'); Route::put('/admin/laporan/{laporan}', [LaporanController::class, 'update'])->name('admin.laporan.update'); Route::delete('/admin/laporan/{laporan}', [LaporanController::class, 'destroy'])->name('admin.laporan.destroy'); Route::get('/admin/laporan/export-pdf', [LaporanController::class, 'exportPdf'])->name('admin.laporan.export-pdf'); Route::get('/admin/laporan/{laporan}/download', [LaporanController::class, 'download'])->name('admin.laporan.download'); // Absensi Ekstrakurikuler Route::get('/admin/absensi-ekskul', AdminAbsensiEkskulController::class)->name('admin.absensi-ekskul'); Route::get('/admin/absensi-ekskul/{organisasi}', [AdminAbsensiEkskulController::class, 'show'])->name('admin.absensi-ekskul.show'); Route::get('/admin/absensi-ekskul/{organisasi}/detail/{pertemuan}', [AdminAbsensiEkskulController::class, 'detail'])->name('admin.absensi-ekskul.detail'); Route::get('/admin/absensi-ekskul/{organisasi}/export-pdf', [AdminAbsensiEkskulController::class, 'exportPdf'])->name('admin.absensi-ekskul.export-pdf'); Route::get('/admin/absensi-ekskul/{organisasi}/pertemuan/{pertemuan}/export-pdf', [AdminAbsensiEkskulController::class, 'exportPertemuanPdf'])->name('admin.absensi-ekskul.export-pertemuan-pdf'); }); Route::middleware(['auth', 'role:ketua'])->group(function (): void { Route::get('/ketua/dashboard', KetuaDashboardController::class)->name('ketua.dashboard'); Route::get('/ketua/profil', KetuaProfilController::class)->name('ketua.profil'); Route::put('/ketua/profil', [KetuaProfilController::class, 'update'])->name('ketua.profil.update'); Route::get('/ketua/organisasi', KetuaOrganisasiController::class)->name('ketua.organisasi'); Route::get('/ketua/kegiatan', KetuaKegiatanController::class)->name('ketua.kegiatan'); Route::post('/ketua/kegiatan', [KetuaKegiatanController::class, 'store'])->name('ketua.kegiatan.store'); Route::put('/ketua/kegiatan/{kegiatan}', [KetuaKegiatanController::class, 'update'])->name('ketua.kegiatan.update'); Route::delete('/ketua/kegiatan/{kegiatan}', [KetuaKegiatanController::class, 'destroy'])->name('ketua.kegiatan.destroy'); Route::get('/ketua/jadwal', KetuaJadwalController::class)->name('ketua.jadwal'); Route::get('/ketua/dokumentasi', KetuaDokumentasiController::class)->name('ketua.dokumentasi'); Route::post('/ketua/dokumentasi', [KetuaDokumentasiController::class, 'store'])->name('ketua.dokumentasi.store'); Route::put('/ketua/dokumentasi/{dokumentasi}', [KetuaDokumentasiController::class, 'update'])->name('ketua.dokumentasi.update'); Route::delete('/ketua/dokumentasi/{dokumentasi}', [KetuaDokumentasiController::class, 'destroy'])->name('ketua.dokumentasi.destroy'); Route::get('/ketua/laporan', KetuaLaporanController::class)->name('ketua.laporan'); Route::post('/ketua/laporan', [KetuaLaporanController::class, 'store'])->name('ketua.laporan.store'); Route::put('/ketua/laporan/{laporan}', [KetuaLaporanController::class, 'update'])->name('ketua.laporan.update'); Route::delete('/ketua/laporan/{laporan}', [KetuaLaporanController::class, 'destroy'])->name('ketua.laporan.destroy'); Route::get('/ketua/laporan/{laporan}/download', [KetuaLaporanController::class, 'download'])->name('ketua.laporan.download'); // Anggota Ekstrakurikuler Route::get('/ketua/anggota', KetuaAnggotaController::class)->name('ketua.anggota'); Route::post('/ketua/anggota', [KetuaAnggotaController::class, 'store'])->name('ketua.anggota.store'); Route::put('/ketua/anggota/{anggota}', [KetuaAnggotaController::class, 'update'])->name('ketua.anggota.update'); Route::delete('/ketua/anggota/{anggota}', [KetuaAnggotaController::class, 'destroy'])->name('ketua.anggota.destroy'); }); Route::middleware(['auth', 'role:pembina'])->group(function (): void { Route::get('/pembina/dashboard', PembinaDashboardController::class)->name('pembina.dashboard'); Route::get('/pembina/profil', PembinaProfilController::class)->name('pembina.profil'); Route::put('/pembina/profil', [PembinaProfilController::class, 'update'])->name('pembina.profil.update'); Route::get('/pembina/organisasi', PembinaOrganisasiController::class)->name('pembina.organisasi'); Route::get('/pembina/kegiatan', PembinaKegiatanController::class)->name('pembina.kegiatan'); Route::get('/pembina/kegiatan/{kegiatan}', [PembinaKegiatanController::class, 'show'])->name('pembina.kegiatan.show'); Route::get('/pembina/validasi', PembinaValidasiController::class)->name('pembina.validasi'); Route::post('/pembina/validasi/{kegiatan}/approve', [PembinaValidasiController::class, 'approve'])->name('pembina.validasi.approve'); Route::post('/pembina/validasi/{kegiatan}/reject', [PembinaValidasiController::class, 'reject'])->name('pembina.validasi.reject'); Route::get('/pembina/jadwal', PembinaJadwalController::class)->name('pembina.jadwal'); Route::get('/pembina/dokumentasi', PembinaDokumentasiController::class)->name('pembina.dokumentasi'); Route::post('/pembina/dokumentasi', [PembinaDokumentasiController::class, 'store'])->name('pembina.dokumentasi.store'); Route::put('/pembina/dokumentasi/{dokumentasi}', [PembinaDokumentasiController::class, 'update'])->name('pembina.dokumentasi.update'); Route::delete('/pembina/dokumentasi/{dokumentasi}', [PembinaDokumentasiController::class, 'destroy'])->name('pembina.dokumentasi.destroy'); Route::get('/pembina/laporan', PembinaLaporanController::class)->name('pembina.laporan'); Route::get('/pembina/laporan/{laporan}/download', [PembinaLaporanController::class, 'download'])->name('pembina.laporan.download'); Route::post('/pembina/laporan/{laporan}/approve', [PembinaLaporanController::class, 'approve'])->name('pembina.laporan.approve'); Route::post('/pembina/laporan/{laporan}/reject', [PembinaLaporanController::class, 'reject'])->name('pembina.laporan.reject'); // Absensi Ekstrakurikuler Route::get('/pembina/absensi-ekskul', PembinaAbsensiEkskulController::class)->name('pembina.absensi-ekskul'); Route::get('/pembina/absensi-ekskul/create', [PembinaAbsensiEkskulController::class, 'create'])->name('pembina.absensi-ekskul.create'); Route::post('/pembina/absensi-ekskul', [PembinaAbsensiEkskulController::class, 'store'])->name('pembina.absensi-ekskul.store'); Route::get('/pembina/absensi-ekskul/rekap', [PembinaAbsensiEkskulController::class, 'rekap'])->name('pembina.absensi-ekskul.rekap'); Route::get('/pembina/absensi-ekskul/{pertemuan}', [PembinaAbsensiEkskulController::class, 'show'])->name('pembina.absensi-ekskul.show'); Route::get('/pembina/absensi-ekskul/{pertemuan}/edit', [PembinaAbsensiEkskulController::class, 'edit'])->name('pembina.absensi-ekskul.edit'); Route::put('/pembina/absensi-ekskul/{pertemuan}', [PembinaAbsensiEkskulController::class, 'update'])->name('pembina.absensi-ekskul.update'); Route::delete('/pembina/absensi-ekskul/{pertemuan}', [PembinaAbsensiEkskulController::class, 'destroy'])->name('pembina.absensi-ekskul.destroy'); });