name('landing-page'); Route::get('/badge-image/{filename}', function ($filename) { $path = base_path('images/badges/' . $filename); if (!file_exists($path)) abort(404); return response()->file($path); })->name('badge.image')->where('filename', '.*'); // ======================================================= // LOGIN PAGES (VIEW ONLY) // ======================================================= // LOGIN ADMIN Route::get('/admin/login', function () { return view('auth.login-admin'); })->name('admin.login'); // LOGIN GURU Route::get('/guru/login', [GuruLoginController::class, 'showLoginForm']) ->name('guru.login'); // LOGIN SISWA Route::get('/siswa/login', [SiswaLoginController::class, 'showLoginForm']) ->name('siswa.login'); // ======================================================= // PROSES LOGIN (POST) // ======================================================= // ADMIN LOGIN PROCESS Route::post('/admin/login', [LoginController::class, 'loginAdmin']) ->name('admin.login.submit'); // GURU LOGIN PROCESS Route::post('/guru/login', [GuruLoginController::class, 'login']) ->name('guru.login.submit'); // SISWA LOGIN PROCESS Route::post('/siswa/login', [SiswaLoginController::class, 'login']) ->name('siswa.login.submit'); // ======================================================= // ADMIN AREA (HARUS LOGIN ADMIN) // ======================================================= Route::middleware(['auth:admin'])->prefix('admin')->name('admin.')->group(function () { // DASHBOARD Route::get('/dashboard',[AdminController::class, 'dashboard'])->name('dashboard'); // PROFILE Route::get('/profile', [AdminProfileController::class, 'edit'])->name('profile.edit'); Route::put('profile', [AdminProfileController::class, 'updateAjax'])->name('profile.updateAjax'); Route::post('/profile',[AdminProfileController::class, 'updateAjax'])->name('profile.update'); // GURU Route::get('/guru/kelas-by-mapel', [AdminGuruController::class, 'getKelasByMapel']) ->name('guru.kelasByMapel'); Route::get('guru/download-pdf', [AdminGuruController::class, 'downloadPdf'])->name('guru.downloadPdf'); Route::get('guru/download-excel', [AdminGuruController::class, 'downloadExcel'])->name('guru.downloadExcel'); Route::resource('guru', AdminGuruController::class); // SISWA Route::get('siswa/download-pdf', [AdminSiswaController::class, 'downloadPdf'])->name('siswa.downloadPdf'); Route::get('siswa/download-excel', [AdminSiswaController::class, 'downloadExcel'])->name('siswa.downloadExcel'); Route::resource('siswa', AdminSiswaController::class); // KELAS Route::get('kelas/download-pdf', [AdminKelasController::class, 'downloadPdf'])->name('kelas.downloadPdf'); Route::get('kelas/download-excel', [AdminKelasController::class, 'downloadExcel'])->name('kelas.downloadExcel'); Route::resource('kelas', AdminKelasController::class); // MAPEL Route::get('mapel/download-pdf', [AdminMapelController::class, 'downloadPdf'])->name('mapel.downloadPdf'); Route::get('mapel/download-excel', [AdminMapelController::class, 'downloadExcel'])->name('mapel.downloadExcel'); Route::resource('mapel', AdminMapelController::class); //HISTORI MATERI Route::get('/materi/history', [AdminMateriTugasController::class, 'historyMateri'])->name('materi.history'); Route::delete('/materi/{id}', [AdminMateriTugasController::class, 'destroyMateri'])->name('materi.destroy'); //HISTRORY TUGAS Route::get('/tugas/history',[AdminMateriTugasController::class, 'historyTugas'])->name('tugas.history'); Route::get('/tugas/{id}/detail',[AdminMateriTugasController::class, 'detailTugas'])->name('tugas.detail'); Route::delete('/tugas/{id}',[AdminMateriTugasController::class, 'destroyTugas'])->name('tugas.destroy'); //CHALLENGE Route::get('/challenge', [AdminChallengeController::class, 'index'])->name('challenge.index'); Route::get('/challenge/{id}', [AdminChallengeController::class, 'show'])->name('challenge.show'); Route::delete('/challenge/{id}', [AdminChallengeController::class, 'destroy'])->name('challenge.destroy'); //LEADERBOARD Route::resource('leaderboard', AdminLeaderboardController::class)->only(['index']); // NOTIF Route::get('/notifikasi', [AdminNotifikasiController::class, 'index'])->name('notifikasi'); //LOGOUT Route::post('/logout', [LoginController::class, 'logout'])->name('logout'); }); // ======================================================= // GURU AREA (HARUS LOGIN GURU) // ======================================================= Route::middleware(['auth:guru'])->prefix('guru')->name('guru.')->group(function () { Route::get('/dashboard', [GuruDashboardController::class, 'index'])->name('dashboard'); // Daftar Kelas (Read Only) Route::get('/daftar-kelas', [GuruKelasController::class, 'index'])->name('kelas.index'); // Daftar Siswa (Read Only) Route::get('/daftar-siswa', [GuruSiswaController::class, 'index'])->name('siswa.index'); Route::get('/mapel', [GuruMapelController::class, 'index']) ->name('mapel.index'); Route::post('/materi/store', [GuruMapelController::class, 'storeMateri'])->name('materi.store'); Route::post('/tugas/store', [GuruMapelController::class, 'storeTugas'])->name('tugas.store'); // routes/web.php (dalam middleware auth guru) Route::put('/materi/{id}', [GuruMapelController::class, 'updateMateri'])->name('materi.update'); Route::put('/tugas/{id}', [GuruMapelController::class, 'updateTugas'])->name('tugas.update'); Route::get('/leaderboard', [GuruLeaderboardController::class, 'index']) ->name('leaderboard.index'); // CHALLENGE GURU Route::resource('challenge', GuruChallengeController::class); Route::get('/challenge/{id}/edit-data', [GuruChallengeController::class, 'editData']) ->name('challenge.editData'); Route::get('/materi/history', [GuruMapelController::class, 'historyMateri'])->name('materi.history'); Route::get('/materi/{id}/edit', [GuruMapelController::class, 'editMateri'])->name('materi.edit'); Route::put('/materi/{id}', [GuruMapelController::class, 'updateMateri'])->name('materi.update'); Route::get('/tugas/history', [GuruMapelController::class, 'historyTugas'])->name('tugas.history'); Route::get('/tugas/{id}/detail', [GuruMapelController::class, 'detailTugas'])->name('tugas.detail'); Route::delete('/tugas/{id}', [GuruMapelController::class, 'destroyTugas'])->name('tugas.destroy'); Route::get('/profile', [GuruProfileController::class, 'edit'])->name('profile.edit'); Route::put('/profile', [GuruProfileController::class, 'updateAjax'])->name('profile.updateAjax'); Route::post('/profile', [GuruProfileController::class, 'updateAjax'])->name('profile.update'); Route::get('/notifikasi', [GuruNotifikasiController::class, 'index'])->name('notifikasi'); // LOGOUT GURU Route::post('/logout', [GuruLoginController::class, 'logout'])->name('logout'); }); // ======================================================= // SISWA AREA // ======================================================= Route::middleware(['auth:siswa'])->prefix('siswa')->name('siswa.')->group(function () { Route::get('/dashboard', [SiswaDashboardController::class, 'index'])->name('dashboard'); // MATERI Route::get('/materi', [SiswaMateriController::class, 'index'])->name('materi.index'); Route::get('/materi/{id_mengajar}', [SiswaMateriController::class, 'show'])->name('materi.show'); // TUGAS Route::get('/tugas', [SiswaTugasController::class, 'index'])->name('tugas.index'); Route::get('/tugas/{id_tugas}', [SiswaTugasController::class, 'show'])->name('tugas.show'); Route::post('/tugas/{id_tugas}/submit', [SiswaTugasController::class, 'submit'])->name('tugas.submit'); Route::put('/tugas/{id_tugas}/ganti-file', [SiswaTugasController::class, 'gantiFile']) ->name('tugas.gantiFile'); // CHALLENGE SISWA Route::get('/challenge',[SiswaChallengeController::class, 'index'])->name('challenge.index'); Route::get('/challenge/{id}/kerjakan',[SiswaChallengeController::class, 'kerjakan'])->name('challenge.kerjakan'); Route::post('/challenge/{id}/submit',[SiswaChallengeController::class, 'submit'])->name('challenge.submit'); Route::get('/challenge/{id}/hasil',[SiswaChallengeController::class, 'hasil'])->name('challenge.hasil'); //LEADERBOARD SISWA Route::get('/leaderboard', [SiswaLeaderboardController::class, 'index'])->name('leaderboard.index'); Route::get('/leaderboard/json', [SiswaLeaderboardController::class, 'json'])->name('leaderboard.json'); //PROFILE SISWA Route::get('/profile', [SiswaProfileController::class, 'edit'])->name('profile.edit'); Route::put('/profile', [SiswaProfileController::class, 'updateAjax'])->name('profile.updateAjax'); Route::post('/profile', [SiswaProfileController::class, 'updateAjax'])->name('profile.update'); // NOTIF Route::get('/notifikasi', [SiswaNotifikasiController::class, 'index'])->name('notifikasi'); // LOGOUT SISWA Route::post('/logout', [SiswaLoginController::class, 'logout'])->name('logout'); });