redirect()->route('admin.dashboard')); // ────────────────────────────────────────────── // Admin Routes // ────────────────────────────────────────────── Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(function () { Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); // Programs Route::resource('programs', ProgramController::class)->parameters(['programs' => 'program:uuid']); Route::post('/programs/{program:uuid}/publish', [ProgramController::class, 'publish'])->name('programs.publish'); Route::post('/programs/{program:uuid}/close', [ProgramController::class, 'close'])->name('programs.close'); // QR Code Route::prefix('programs/{program:uuid}/qr')->name('programs.qr.')->group(function () { Route::get('/', [QrCodeController::class, 'show'])->name('show'); Route::post('/generate', [QrCodeController::class, 'generate'])->name('generate'); Route::get('/download', [QrCodeController::class, 'download'])->name('download'); Route::post('/deactivate',[QrCodeController::class, 'deactivate'])->name('deactivate'); }); // Participants Route::prefix('programs/{program:uuid}/participants')->name('programs.participants.')->group(function () { Route::get('/', [ParticipantController::class, 'index'])->name('index'); Route::get('/create', [ParticipantController::class, 'create'])->name('create'); Route::post('/', [ParticipantController::class, 'store'])->name('store'); Route::delete('/{pp}', [ParticipantController::class, 'destroy'])->name('destroy'); Route::get('/import', [ParticipantController::class, 'importForm'])->name('import.form'); Route::post('/import', [ParticipantController::class, 'import'])->name('import'); Route::get('/export', [ParticipantController::class, 'export'])->name('export'); }); // Certificate Template Route::prefix('programs/{program:uuid}/template')->name('programs.template.')->group(function () { Route::get('/', [CertificateTemplateController::class, 'show'])->name('show'); Route::post('/', [CertificateTemplateController::class, 'store'])->name('store'); Route::put('/config', [CertificateTemplateController::class, 'updateConfig'])->name('config'); Route::delete('/', [CertificateTemplateController::class, 'destroy'])->name('destroy'); Route::get('/preview', [CertificateTemplateController::class, 'preview'])->name('preview'); Route::post('/test', [CertificateTemplateController::class, 'testGenerate'])->name('test'); }); // Program Questionnaire Route::prefix('programs/{program:uuid}/questionnaire')->name('programs.questionnaire.')->group(function () { Route::get('/', [ProgramQuestionnaireController::class, 'show'])->name('show'); Route::post('/attach', [ProgramQuestionnaireController::class, 'attach'])->name('attach'); Route::post('/confirm', [ProgramQuestionnaireController::class, 'confirm'])->name('confirm'); Route::delete('/detach', [ProgramQuestionnaireController::class, 'detach'])->name('detach'); }); // Program Statistics Route::prefix('programs/{program:uuid}/statistics')->name('programs.statistics.')->group(function () { Route::get('/', [StatisticsController::class, 'show'])->name('show'); Route::get('/export', [StatisticsController::class, 'export'])->name('export'); }); // Certificates (Admin) Route::prefix('programs/{program:uuid}/certificates')->name('programs.certificates.')->group(function () { Route::get('/', [AdminCertificateController::class, 'index'])->name('index'); Route::post('/generate-all', [AdminCertificateController::class, 'generateAll'])->name('generate-all'); Route::post('/email-all', [AdminCertificateController::class, 'emailAll'])->name('email-all'); }); // Questionnaire Sets Route::resource('questionnaires', QuestionnaireSetController::class)->except(['show'])->parameters(['questionnaires' => 'set']); Route::post('/questionnaires/{set}/publish', [QuestionnaireSetController::class, 'publish'])->name('questionnaires.publish'); Route::post('/questionnaires/{set}/archive', [QuestionnaireSetController::class, 'archive'])->name('questionnaires.archive'); Route::get('/questionnaires/{set}', [QuestionnaireSetController::class, 'show'])->name('questionnaires.show'); // Questions Route::post('/questionnaires/{set}/questions', [QuestionController::class, 'store'])->name('questions.store'); Route::put('/questions/{question}', [QuestionController::class, 'update'])->name('questions.update'); Route::delete('/questions/{question}', [QuestionController::class, 'destroy'])->name('questions.destroy'); Route::post('/questions/reorder', [QuestionController::class, 'reorder'])->name('questions.reorder'); }); // ────────────────────────────────────────────── // Public Routes (QR Check-in Flow) // ────────────────────────────────────────────── Route::middleware('throttle:checkin')->prefix('p')->name('public.')->group(function () { Route::get('/{qr_token}', [CheckinController::class, 'show'])->name('checkin.show'); Route::post('/{qr_token}/staff', [CheckinController::class, 'staffCheckin'])->name('checkin.staff'); Route::post('/{qr_token}/external', [CheckinController::class, 'externalRegister'])->name('checkin.external'); Route::get('/{qr_token}/semak', [AttendanceCheckController::class, 'show'])->name('semak.show'); Route::post('/{qr_token}/semak', [AttendanceCheckController::class, 'check'])->name('semak.check'); Route::get('/{qr_token}/questionnaire/{participant_uuid}', [QuestionnaireController::class, 'show'])->name('questionnaire.show'); Route::post('/{qr_token}/questionnaire/{participant_uuid}', [QuestionnaireController::class, 'submit'])->name('questionnaire.submit'); }); // ────────────────────────────────────────────── // Public Certificate Download // ────────────────────────────────────────────── Route::middleware('throttle:certificate')->prefix('certificate')->name('public.certificate.')->group(function () { Route::get('/{cert_token}', [CertificateController::class, 'show'])->name('show'); Route::post('/{cert_token}/download',[CertificateController::class, 'download'])->name('download'); }); require __DIR__.'/auth.php';