aboutsummaryrefslogtreecommitdiffstats
path: root/source/routes/api.php
blob: 9be5a8cff02e8512f9b8c85a6c05daeb6edd3373 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?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');