group(function () { Route::post('/students', [StudentController::class, 'store']); Route::get('/students/{id}', [StudentController::class, 'show']); }); Route::get('/students/{id}/verify', [StudentController::class, 'verify']) ->name('students.verify') // maak een naam voor de route, kan ik die straks makkelijker aanroepen in de mail view ->middleware('signed'); Route::get('/students', [StudentController::class, 'index']); Route::middleware(['auth:sanctum', 'ability:student,admin', 'throttle:300,1'])->group(function () { Route::put('/students/{id}', [StudentController::class, 'update']); Route::delete('/students/{id}', [StudentController::class, 'destroy']); Route::patch('/students/{id}', [StudentController::class, 'partialUpdate']); }); // Company routes Route::middleware(['throttle:300,1'])->group(function () { Route::get('/companies', [CompanyController::class, 'index']); Route::get('/companies/{id}', [CompanyController::class, 'show']); }); Route::middleware(['auth:sanctum', 'ability:company,admin', 'throttle:300,1'])->group(function () { Route::post('/companies', [CompanyController::class, 'store']); Route::put('/companies/{id}', [CompanyController::class, 'update']); Route::delete('/companies/{id}', [CompanyController::class, 'destroy']); Route::patch('companies/{id}', [CompanyController::class, 'partialUpdate']); }); // Admin routes Route::post('/admins', [AdminController::class, 'store']); Route::middleware(['auth:sanctum', 'ability:admin', 'throttle:1,1'])->group(function () { // Admin CRUD operations Route::get('/admins', [AdminController::class, 'index']); Route::get('/admins/{id}', [AdminController::class, 'show']); Route::put('/admins/{id}', [AdminController::class, 'update']); Route::delete('/admins/{id}', [AdminController::class, 'destroy']); }); // Logs Route::middleware(['auth:sanctum', 'ability:admin', 'throttle:50,1'])->group(function () { Route::get('/admin/logs', [LogController::class, 'getLogs']); Route::get('admin/logs/students/{id}', [LogController::class, 'getLogsStudent']); Route::get('admin/logs/companies/{id}', [LogController::class, 'getLogsCompany']); Route::get('admin/logs/admins/{id}', [LogController::class, 'getLogsAdmin']); }); // Appointment routes Route::middleware(['auth:sanctum', 'throttle:500,1'])->group(function () { Route::get('/appointments', [AppointmentController::class, 'index']); Route::post('/appointments', [AppointmentController::class, 'store']); Route::get('/appointments/{id}', [AppointmentController::class, 'show']); Route::put('/appointments/{id}', [AppointmentController::class, 'update']); Route::delete('/appointments/{id}', [AppointmentController::class, 'destroy']); Route::get('/connections', [ConnectionController::class, 'index']); Route::post('/connections', [ConnectionController::class, 'store']); Route::get('/connections/{id}', [ConnectionController::class, 'show']); Route::patch('/connections/{id}', [ConnectionController::class, 'update']); // hier een patch in plaats van een put omdat enkel het tijdstip wordt aangepast Route::delete('/connections/{id}', [ConnectionController::class, 'destroy']); Route::get('/connections/student/{id}', [ConnectionController::class, 'showConnectionStudent']); Route::get('/connections/company/{id}', [ConnectionController::class, 'showConnectionCompany']); // Protected Logout Authenticatie Route::post('/students/logout', [StudentAuthController::class, 'logout']); Route::post('/companies/logout', [CompanyAuthController::class, 'logout']); Route::post('/admins/logout', [AdminAuthController::class, 'logout']); Route::post('/logout', [LoginController::class, 'logout']); }); // Authenticatie mail routes Route::post('/password-reset', [PasswordResetController::class, 'sendResetStudentPassword']); // Berichten Route::post('/messages/send', [MessageController::class, 'sendMessage']); Route::post('/messages/conversation', [MessageController::class, 'getConversation']); Route::middleware('throttle:api')->group(function () { // Skills routes Route::get('/skills', [SkillController::class, 'index']); Route::get('/skills/{id}', [SkillController::class, 'show']); Route::post('/students/{id}/skills', [SkillController::class, 'attachToStudent']); Route::delete('/students/{id}/skills/{skill_id}', [SkillController::class, 'detachFromStudent']); Route::get('/students/{id}/skills', [SkillController::class, 'getStudentSkills']); Route::post('/companies/{id}/skills', [SkillController::class, 'attachToCompany']); Route::delete('/companies/{id}/skills/{skill_id}', [SkillController::class, 'detachFromCompany']); Route::get('/companies/{id}/skills', [SkillController::class, 'getCompanySkills']); // Calculate skill match percentage Route::get('/match/{student_id}/{company_id}', [SkillController::class, 'calculateMatch']); // Diplomas ophalen Route::get('/diplomas', [DiplomaController::class, 'index']); Route::get('/diplomas/{id}', [DiplomaController::class, 'show']); }); // Authenticatie Route::post('/students/login', [StudentAuthController::class, 'login'])->middleware('throttle:login'); Route::post('/companies/login', [CompanyAuthController::class, 'login'])->middleware('throttle:login'); Route::post('/admins/login', [AdminAuthController::class, 'login'])->middleware('throttle:login'); Route::post('/login', [LoginController::class, 'login'])->middleware('throttle:login');