name('public.student-lookup'); Route::get('/lengkapi-data-siswa', [PublicStudentSelfServiceController::class, 'index'])->name('public.student-self-service.index'); Route::post('/lengkapi-data-siswa/verifikasi', [PublicStudentSelfServiceController::class, 'verify'])->name('public.student-self-service.verify'); Route::get('/lengkapi-data-siswa/form', [PublicStudentSelfServiceController::class, 'edit'])->name('public.student-self-service.edit'); Route::post('/lengkapi-data-siswa/form', [PublicStudentSelfServiceController::class, 'update'])->name('public.student-self-service.update'); Route::redirect('/admin-akses-rahasia', '/masuk-admin'); Route::redirect('/portal-admin-dk-login', '/masuk-admin'); Route::redirect('/masuk-admin-rahasia', '/masuk-admin')->name('hidden-login'); Route::get('public/student-documents/{document}/preview', [StudentDocumentController::class, 'publicPreview'])->name('public.students.documents.preview'); Route::get('public/student-documents/{document}/download', [StudentDocumentController::class, 'publicDownload'])->name('public.students.documents.download'); Route::get('public/students/{student}/graduation-documents/{document}/download', [PublicStudentLookupController::class, 'downloadGraduationDocument'])->name('public.students.graduation-documents.download'); Route::get('regions/provinces/{province}/regencies', [RegionController::class, 'regencies'])->name('regions.regencies'); Route::get('regions/regencies/{regency}/districts', [RegionController::class, 'districts'])->name('regions.districts'); Route::get('regions/districts/{district}/villages', [RegionController::class, 'villages'])->name('regions.villages'); Route::middleware(['auth', 'verified'])->group(function () { Route::get('/dashboard', DashboardController::class)->name('dashboard'); Route::middleware('role:admin')->group(function () { Route::resource('academic-years', AcademicYearController::class); Route::resource('departments', DepartmentController::class); Route::post('classes/generate', [SchoolClassController::class, 'generate'])->name('classes.generate'); Route::delete('classes/bulk-delete', [SchoolClassController::class, 'bulkDestroy'])->name('classes.bulk-destroy'); Route::resource('classes', SchoolClassController::class); Route::post('document-types/{documentType}/purge-archived-documents', [DocumentTypeController::class, 'purgeArchivedDocuments'])->name('document-types.purge-archived-documents'); Route::resource('document-types', DocumentTypeController::class); Route::prefix('settings')->name('settings.')->group(function () { Route::resource('users', UserManagementController::class)->except(['show']); Route::get('branding', [BrandingSettingController::class, 'index'])->name('branding.index'); Route::put('branding', [BrandingSettingController::class, 'update'])->name('branding.update'); Route::get('sync-tokens', [SyncTokenController::class, 'index'])->name('sync-tokens.index'); Route::post('sync-tokens', [SyncTokenController::class, 'store'])->name('sync-tokens.store'); Route::patch('sync-tokens/{syncToken}/revoke', [SyncTokenController::class, 'revoke'])->name('sync-tokens.revoke'); Route::get('reset-data', [MaintenanceController::class, 'index'])->name('reset-data.index'); Route::post('reset-data', [MaintenanceController::class, 'reset'])->name('reset-data.execute'); }); }); Route::get('students/keluar', [StudentExitController::class, 'index'])->name('student-exits.index'); Route::get('students/keluar/{studentExit}', [StudentExitController::class, 'show'])->name('student-exits.show'); Route::patch('students/keluar/{studentExit}', [StudentExitController::class, 'update'])->name('student-exits.update'); Route::get('students/keluar/{studentExit}/preview-letter', [StudentExitController::class, 'previewLetter'])->name('student-exits.preview-letter'); Route::get('students/mutasi', [StudentTransferController::class, 'index'])->name('student-transfers.index'); Route::get('students/mutasi/{studentTransfer}', [StudentTransferController::class, 'show'])->name('student-transfers.show'); Route::patch('students/mutasi/{studentTransfer}', [StudentTransferController::class, 'update'])->name('student-transfers.update'); Route::get('students/mutasi/{studentTransfer}/preview-letter', [StudentTransferController::class, 'previewLetter'])->name('student-transfers.preview-letter'); Route::get('students/lulus', [GraduatedStudentController::class, 'index'])->name('graduated-students.index'); Route::get('students/lulus/bulk-upload', [GraduationBulkUploadController::class, 'index'])->name('graduated-students.bulk-upload.index'); Route::post('students/lulus/bulk-upload/preview', [GraduationBulkUploadController::class, 'preview'])->name('graduated-students.bulk-upload.preview'); Route::post('students/lulus/bulk-upload', [GraduationBulkUploadController::class, 'store'])->name('graduated-students.bulk-upload.store'); Route::get('students/lulus/{graduatedStudent}', [GraduatedStudentController::class, 'show'])->name('graduated-students.show'); Route::patch('students/lulus/{graduatedStudent}', [GraduatedStudentController::class, 'update'])->name('graduated-students.update'); Route::get('students/lulus/{graduatedStudent}/preview-document/{document}', [GraduatedStudentController::class, 'previewDocument'])->name('graduated-students.preview-document'); Route::get('students/import', [StudentController::class, 'importForm'])->name('students.import.form'); Route::post('students/import/preview', [StudentController::class, 'previewImport'])->name('students.import.preview'); Route::post('students/import', [StudentController::class, 'import'])->name('students.import'); Route::get('students/import/template', [StudentController::class, 'downloadImportTemplate'])->name('students.import.template'); Route::get('students/import/example', [StudentController::class, 'downloadImportExample'])->name('students.import.example'); Route::delete('students/bulk-delete', [StudentController::class, 'bulkDestroy'])->name('students.bulk-destroy'); Route::resource('students', StudentController::class); Route::get('student-promotions', [StudentPromotionController::class, 'index'])->name('student-promotions.index'); Route::post('student-promotions', [StudentPromotionController::class, 'store'])->name('student-promotions.store'); Route::resource('student-achievements', StudentAchievementController::class)->except(['show']); Route::get('student-self-service', [StudentSelfServiceController::class, 'index'])->name('student-self-service.index'); Route::post('student-self-service/generate-missing-codes', [StudentSelfServiceController::class, 'generateMissingCodes'])->name('student-self-service.generate-missing-codes'); Route::post('student-self-service/regenerate-all-codes', [StudentSelfServiceController::class, 'regenerateAllCodes'])->name('student-self-service.regenerate-all-codes'); Route::post('student-self-service/{student}/regenerate-code', [StudentSelfServiceController::class, 'regenerateStudentCode'])->name('student-self-service.regenerate-student-code'); Route::get('student-self-service/export-class-codes', [StudentSelfServiceController::class, 'exportClassCodes'])->name('student-self-service.export-class-codes'); Route::resource('students.parents', StudentParentController::class)->except(['index', 'show']); Route::resource('students.documents', StudentDocumentController::class)->except(['index', 'show']); Route::post('students/{student}/documents/{document}/quick-verify', [StudentDocumentController::class, 'quickVerify'])->name('students.documents.quick-verify'); Route::get('student-documents/{document}/preview', [StudentDocumentController::class, 'preview'])->name('students.documents.preview'); Route::get('student-documents/{document}/download', [StudentDocumentController::class, 'download'])->name('students.documents.download'); Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); }); require __DIR__.'/auth.php';