61 lines
2.5 KiB
PHP
61 lines
2.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Http\Controllers\Auth\SocialiteController;
|
|
use App\Http\Controllers\LandingController;
|
|
use App\Http\Controllers\ScreeningController;
|
|
use App\Http\Controllers\SessionController;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
// Landing page (public)
|
|
Route::get('/', [LandingController::class, 'index'])->name('landing');
|
|
|
|
// Authentication routes
|
|
Route::get('/login', [SocialiteController::class, 'redirect'])->name('login');
|
|
Route::get('/auth/callback', [SocialiteController::class, 'callback']);
|
|
Route::post('/logout', [SocialiteController::class, 'logout'])->name('logout')->middleware('auth');
|
|
|
|
// Questionnaire routes (authenticated)
|
|
Route::middleware('auth')->group(function () {
|
|
// Screening routes
|
|
Route::post('/screening', [ScreeningController::class, 'store'])->name('screening.store');
|
|
Route::get('/screening/{screening}', [ScreeningController::class, 'show'])->name('screening.show');
|
|
Route::put('/screening/{screening}', [ScreeningController::class, 'update'])->name('screening.update');
|
|
Route::get('/screening/{screening}/result', [ScreeningController::class, 'result'])->name('screening.result');
|
|
|
|
// Session routes (with history encryption)
|
|
Route::middleware('encrypt.history')->group(function () {
|
|
Route::post('/sessions', [SessionController::class, 'store'])->name('sessions.store');
|
|
Route::get('/sessions/{session}', [SessionController::class, 'show'])->name('sessions.show');
|
|
Route::put('/sessions/{session}', [SessionController::class, 'update'])->name('sessions.update');
|
|
Route::get('/sessions/{session}/result', [SessionController::class, 'result'])->name('sessions.result');
|
|
Route::get('/sessions/{session}/pdf', [SessionController::class, 'pdf'])->name('sessions.pdf');
|
|
});
|
|
});
|
|
|
|
// Dev auto-login route
|
|
Route::get('/login-for-testing', function () {
|
|
$user = \App\Models\User::where('email', 'jonathan.van.rij@agerion.nl')->first();
|
|
|
|
auth()->login($user);
|
|
|
|
return redirect('/');
|
|
});
|
|
|
|
// Dev PDF preview route — renders the PDF Blade template as raw HTML (no PDF generation)
|
|
Route::get('/pdf-preview/{session}', function (\App\Models\Session $session) {
|
|
$session->load(['user', 'category', 'answers.question']);
|
|
|
|
$questionGroups = $session->category
|
|
->questionGroups()
|
|
->with(['questions' => fn ($q) => $q->orderBy('sort_order')])
|
|
->orderBy('sort_order')
|
|
->get();
|
|
|
|
return view('pdf.session-result', [
|
|
'session' => $session,
|
|
'questionGroups' => $questionGroups,
|
|
]);
|
|
});
|