aboutsummaryrefslogtreecommitdiffstats
<?php

use App\Http\Controllers\Api\AdminController;
use App\Http\Controllers\Api\AppointmentController;
use App\Http\Controllers\Api\Auth\AdminAuthController;
use App\Http\Controllers\Api\Auth\CompanyAuthController;
use App\Http\Controllers\Api\Auth\StudentAuthController;
use App\Http\Controllers\Api\CompanyController;
use App\Http\Controllers\Api\ConnectionController;
use App\Http\Controllers\Api\DiplomaController;
use App\Http\Controllers\Api\LogController;
use App\Http\Controllers\Api\LoginController;
use App\Http\Controllers\Api\MessageController;
use App\Http\Controllers\Api\PasswordResetController;
use App\Http\Controllers\Api\SkillController;
use App\Http\Controllers\Api\StudentController;
use Illuminate\Support\Facades\Route;

// Student routes


Route::middleware(['throttle:300,1'])->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');