diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index df0bb84..cb94215 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,7 +26,7 @@ jobs: - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: "8.2" + php-version: "8.3" extensions: mbstring, pdo, pdo_mysql, bcmath coverage: xdebug diff --git a/package-lock.json b/package-lock.json index f201384..b538440 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1368,6 +1368,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -2638,6 +2639,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -3059,6 +3061,7 @@ "integrity": "sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -3179,6 +3182,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -3267,6 +3271,7 @@ "integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -3371,6 +3376,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, diff --git a/routes/mahasiswa/ai.php b/routes/mahasiswa/ai.php new file mode 100644 index 0000000..fcd4335 --- /dev/null +++ b/routes/mahasiswa/ai.php @@ -0,0 +1,8 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/ai-advisor', [\App\Http\Controllers\Mahasiswa\AiAdvisorController::class, 'index'])->name('ai-advisor.index'); + Route::post('/ai-advisor/chat', [\App\Http\Controllers\Mahasiswa\AiAdvisorController::class, 'chat'])->middleware('throttle:ai-chat')->name('ai-advisor.chat'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/biodata.php b/routes/mahasiswa/biodata.php new file mode 100644 index 0000000..3dfdafa --- /dev/null +++ b/routes/mahasiswa/biodata.php @@ -0,0 +1,9 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/biodata', [\App\Http\Controllers\Mahasiswa\BiodataController::class, 'index'])->name('biodata.index'); + Route::put('/biodata', [\App\Http\Controllers\Mahasiswa\BiodataController::class, 'update'])->name('biodata.update'); + Route::put('/biodata/password', [\App\Http\Controllers\Mahasiswa\BiodataController::class, 'updatePassword'])->name('biodata.password'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/dashboard.php b/routes/mahasiswa/dashboard.php new file mode 100644 index 0000000..93b67c2 --- /dev/null +++ b/routes/mahasiswa/dashboard.php @@ -0,0 +1,7 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/dashboard', [\App\Http\Controllers\Mahasiswa\DashboardController::class, 'index'])->name('dashboard'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/export.php b/routes/mahasiswa/export.php new file mode 100644 index 0000000..23faf0e --- /dev/null +++ b/routes/mahasiswa/export.php @@ -0,0 +1,8 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/export/transkrip', [\App\Http\Controllers\Mahasiswa\ExportController::class, 'transkrip'])->name('export.transkrip'); + Route::get('/export/khs/{tahunAkademik}', [\App\Http\Controllers\Mahasiswa\ExportController::class, 'khs'])->name('export.khs'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/index.php b/routes/mahasiswa/index.php new file mode 100644 index 0000000..885669c --- /dev/null +++ b/routes/mahasiswa/index.php @@ -0,0 +1,18 @@ + + +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/jadwal', [\App\Http\Controllers\Mahasiswa\JadwalController::class, 'index'])->name('jadwal.index'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/khs.php b/routes/mahasiswa/khs.php new file mode 100644 index 0000000..1cb9144 --- /dev/null +++ b/routes/mahasiswa/khs.php @@ -0,0 +1,8 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/khs', [\App\Http\Controllers\Mahasiswa\KhsController::class, 'index'])->name('khs.index'); + Route::get('/khs/{tahunAkademik}', [\App\Http\Controllers\Mahasiswa\KhsController::class, 'show'])->name('khs.show'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/kp.php b/routes/mahasiswa/kp.php new file mode 100644 index 0000000..96dff19 --- /dev/null +++ b/routes/mahasiswa/kp.php @@ -0,0 +1,10 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/kp', [\App\Http\Controllers\Mahasiswa\KpController::class, 'index'])->name('kp.index'); + Route::get('/kp/create', [\App\Http\Controllers\Mahasiswa\KpController::class, 'create'])->name('kp.create'); + Route::post('/kp', [\App\Http\Controllers\Mahasiswa\KpController::class, 'store'])->name('kp.store'); + Route::post('/kp/logbook', [\App\Http\Controllers\Mahasiswa\KpController::class, 'storeLogbook'])->name('kp.logbook.store'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/krs.php b/routes/mahasiswa/krs.php new file mode 100644 index 0000000..6d66dd6 --- /dev/null +++ b/routes/mahasiswa/krs.php @@ -0,0 +1,12 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/krs', [KrsController::class, 'index'])->name('krs.index'); + Route::post('/krs', [KrsController::class, 'store'])->middleware('throttle:krs')->name('krs.store'); + Route::delete('/krs/{detailId}', [KrsController::class, 'destroy'])->middleware('throttle:krs')->name('krs.destroy'); + Route::post('/krs/submit', [KrsController::class, 'submit'])->middleware('throttle:krs')->name('krs.submit'); + Route::post('/krs/revise', [KrsController::class, 'revise'])->middleware('throttle:krs')->name('krs.revise'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/lms.php b/routes/mahasiswa/lms.php new file mode 100644 index 0000000..5d44fa9 --- /dev/null +++ b/routes/mahasiswa/lms.php @@ -0,0 +1,7 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/lms', [\App\Http\Controllers\Mahasiswa\LmsController::class, 'index'])->name('lms.index'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/materi.php b/routes/mahasiswa/materi.php new file mode 100644 index 0000000..43ddcfc --- /dev/null +++ b/routes/mahasiswa/materi.php @@ -0,0 +1,8 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/materi/{kelas}', [\App\Http\Controllers\Mahasiswa\MateriController::class, 'index'])->name('materi.index'); + Route::get('/materi/{kelas}/download/{materi}', [\App\Http\Controllers\Mahasiswa\MateriController::class, 'download'])->name('materi.download'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/presensi.php b/routes/mahasiswa/presensi.php new file mode 100644 index 0000000..bce7fa5 --- /dev/null +++ b/routes/mahasiswa/presensi.php @@ -0,0 +1,8 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/presensi', [\App\Http\Controllers\Mahasiswa\PresensiController::class, 'index'])->name('presensi.index'); + Route::get('/presensi/{kelas}', [\App\Http\Controllers\Mahasiswa\PresensiController::class, 'show'])->name('presensi.show'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/skripsi.php b/routes/mahasiswa/skripsi.php new file mode 100644 index 0000000..704cb46 --- /dev/null +++ b/routes/mahasiswa/skripsi.php @@ -0,0 +1,10 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/skripsi', [\App\Http\Controllers\Mahasiswa\SkripsiController::class, 'index'])->name('skripsi.index'); + Route::get('/skripsi/create', [\App\Http\Controllers\Mahasiswa\SkripsiController::class, 'create'])->name('skripsi.create'); + Route::post('/skripsi', [\App\Http\Controllers\Mahasiswa\SkripsiController::class, 'store'])->name('skripsi.store'); + Route::post('/skripsi/bimbingan', [\App\Http\Controllers\Mahasiswa\SkripsiController::class, 'storeBimbingan'])->name('skripsi.bimbingan.store'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/transkrip.php b/routes/mahasiswa/transkrip.php new file mode 100644 index 0000000..3fd8789 --- /dev/null +++ b/routes/mahasiswa/transkrip.php @@ -0,0 +1,8 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/transkrip', [TranskripController::class, 'index'])->name('transkrip.index'); +}); \ No newline at end of file diff --git a/routes/mahasiswa/tugas.php b/routes/mahasiswa/tugas.php new file mode 100644 index 0000000..7dfe6ee --- /dev/null +++ b/routes/mahasiswa/tugas.php @@ -0,0 +1,10 @@ +prefix('mahasiswa')->name('mahasiswa.')->group(function () { + Route::get('/tugas/{kelas}', [\App\Http\Controllers\Mahasiswa\TugasController::class, 'index'])->name('tugas.index'); + Route::get('/tugas/{kelas}/{tugas}', [\App\Http\Controllers\Mahasiswa\TugasController::class, 'show'])->name('tugas.show'); + Route::post('/tugas/{kelas}/{tugas}/submit', [\App\Http\Controllers\Mahasiswa\TugasController::class, 'submit'])->name('tugas.submit'); + Route::get('/tugas/{kelas}/{tugas}/download', [\App\Http\Controllers\Mahasiswa\TugasController::class, 'download'])->name('tugas.download'); +}); \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 111a1aa..5784d41 100644 --- a/routes/web.php +++ b/routes/web.php @@ -12,9 +12,6 @@ use App\Http\Controllers\Admin\KrsApprovalController; use App\Http\Controllers\Admin\MahasiswaController; use App\Http\Controllers\Admin\DosenController; -use App\Http\Controllers\Mahasiswa\KrsController; -use App\Http\Controllers\Mahasiswa\TranskripController; -use App\Http\Controllers\Dosen\PenilaianController; use App\Http\Controllers\HealthController; // Health check routes (no auth required) @@ -143,70 +140,6 @@ Route::get('/kehadiran-dosen/{dosen}', [\App\Http\Controllers\Admin\KehadiranDosenController::class, 'show'])->name('kehadiran-dosen.show'); }); -// --- MAHASISWA ROUTES --- -Route::middleware(['auth', 'role:mahasiswa'])->prefix('mahasiswa')->name('mahasiswa.')->group(function () { - // Dashboard - Route::get('/dashboard', [\App\Http\Controllers\Mahasiswa\DashboardController::class, 'index'])->name('dashboard'); - - Route::get('/krs', [KrsController::class, 'index'])->name('krs.index'); - Route::post('/krs', [KrsController::class, 'store'])->middleware('throttle:krs')->name('krs.store'); - Route::delete('/krs/{detailId}', [KrsController::class, 'destroy'])->middleware('throttle:krs')->name('krs.destroy'); - Route::post('/krs/submit', [KrsController::class, 'submit'])->middleware('throttle:krs')->name('krs.submit'); - Route::post('/krs/revise', [KrsController::class, 'revise'])->middleware('throttle:krs')->name('krs.revise'); - - // Transkrip - Route::get('/transkrip', [TranskripController::class, 'index'])->name('transkrip.index'); - - // Biodata - Route::get('/biodata', [\App\Http\Controllers\Mahasiswa\BiodataController::class, 'index'])->name('biodata.index'); - Route::put('/biodata', [\App\Http\Controllers\Mahasiswa\BiodataController::class, 'update'])->name('biodata.update'); - Route::put('/biodata/password', [\App\Http\Controllers\Mahasiswa\BiodataController::class, 'updatePassword'])->name('biodata.password'); - - // Presensi - Route::get('/presensi', [\App\Http\Controllers\Mahasiswa\PresensiController::class, 'index'])->name('presensi.index'); - Route::get('/presensi/{kelas}', [\App\Http\Controllers\Mahasiswa\PresensiController::class, 'show'])->name('presensi.show'); - - // Jadwal Kuliah - Route::get('/jadwal', [\App\Http\Controllers\Mahasiswa\JadwalController::class, 'index'])->name('jadwal.index'); - - // KHS (Kartu Hasil Studi) - Route::get('/khs', [\App\Http\Controllers\Mahasiswa\KhsController::class, 'index'])->name('khs.index'); - Route::get('/khs/{tahunAkademik}', [\App\Http\Controllers\Mahasiswa\KhsController::class, 'show'])->name('khs.show'); - - // Export PDF - Route::get('/export/transkrip', [\App\Http\Controllers\Mahasiswa\ExportController::class, 'transkrip'])->name('export.transkrip'); - Route::get('/export/khs/{tahunAkademik}', [\App\Http\Controllers\Mahasiswa\ExportController::class, 'khs'])->name('export.khs'); - - // AI Academic Advisor - Route::get('/ai-advisor', [\App\Http\Controllers\Mahasiswa\AiAdvisorController::class, 'index'])->name('ai-advisor.index'); - Route::post('/ai-advisor/chat', [\App\Http\Controllers\Mahasiswa\AiAdvisorController::class, 'chat'])->middleware('throttle:ai-chat')->name('ai-advisor.chat'); - - // Skripsi - Route::get('/skripsi', [\App\Http\Controllers\Mahasiswa\SkripsiController::class, 'index'])->name('skripsi.index'); - Route::get('/skripsi/create', [\App\Http\Controllers\Mahasiswa\SkripsiController::class, 'create'])->name('skripsi.create'); - Route::post('/skripsi', [\App\Http\Controllers\Mahasiswa\SkripsiController::class, 'store'])->name('skripsi.store'); - Route::post('/skripsi/bimbingan', [\App\Http\Controllers\Mahasiswa\SkripsiController::class, 'storeBimbingan'])->name('skripsi.bimbingan.store'); - - // KP - Route::get('/kp', [\App\Http\Controllers\Mahasiswa\KpController::class, 'index'])->name('kp.index'); - Route::get('/kp/create', [\App\Http\Controllers\Mahasiswa\KpController::class, 'create'])->name('kp.create'); - Route::post('/kp', [\App\Http\Controllers\Mahasiswa\KpController::class, 'store'])->name('kp.store'); - Route::post('/kp/logbook', [\App\Http\Controllers\Mahasiswa\KpController::class, 'storeLogbook'])->name('kp.logbook.store'); - - // E-Learning (LMS) - Route::get('/lms', [\App\Http\Controllers\Mahasiswa\LmsController::class, 'index'])->name('lms.index'); - - // Materi Kuliah - Route::get('/materi/{kelas}', [\App\Http\Controllers\Mahasiswa\MateriController::class, 'index'])->name('materi.index'); - Route::get('/materi/{kelas}/download/{materi}', [\App\Http\Controllers\Mahasiswa\MateriController::class, 'download'])->name('materi.download'); - - // Tugas - Route::get('/tugas/{kelas}', [\App\Http\Controllers\Mahasiswa\TugasController::class, 'index'])->name('tugas.index'); - Route::get('/tugas/{kelas}/{tugas}', [\App\Http\Controllers\Mahasiswa\TugasController::class, 'show'])->name('tugas.show'); - Route::post('/tugas/{kelas}/{tugas}/submit', [\App\Http\Controllers\Mahasiswa\TugasController::class, 'submit'])->name('tugas.submit'); - Route::get('/tugas/{kelas}/{tugas}/download', [\App\Http\Controllers\Mahasiswa\TugasController::class, 'download'])->name('tugas.download'); -}); - // --- DOSEN ROUTES --- Route::middleware(['auth', 'role:dosen'])->prefix('dosen')->name('dosen.')->group(function () { // Dashboard @@ -269,3 +202,4 @@ }); require __DIR__.'/auth.php'; +require __DIR__.'/mahasiswa/index.php';