Issues (404)

Branch: dev

routes/web.php (1 issue)

Labels
Severity
1
<?php
2
3
use Illuminate\Support\Facades\Lang;
4
5
/*
6
|--------------------------------------------------------------------------
7
| Web Routes
8
|--------------------------------------------------------------------------
9
|
10
| Here is where you can register web routes for your application. These
11
| routes are loaded by the RouteServiceProvider within a group which
12
| contains the "web" middleware group. Now create something great!
13
|
14
 */
15
16
/* ADD ALL LOCALIZED ROUTES INSIDE THIS GROUP */
17
18
Route::group(
19
    [
20
        'prefix' => LaravelLocalization::setLocale(),
21
        'middleware' => ['localeSessionRedirect', 'localizationRedirect', 'localeViewPath']
22
    ],
23
    function (): void {
24
        /* Routes used for local demos */
25
        /* If creating public demos, make sure to add a meta robots noindex, nofollow tag */
26
        Route::group(['prefix' => 'demo'], function (): void {
27
28
            /* Temporary Blog Index */
29
            Route::view('blog', 'common/blog-index')->middleware('localOnly')->name('blog');
30
31
            /* Temporary Blog Post */
32
            Route::view('post', 'common/blog-post')->middleware('localOnly')->name('post');
33
34
            /* Static - Reliability Form Demo */
35
            Route::view('reliability', 'demos/reliability/index', ['reliability' => Lang::get('common/reliability')])->name('reliability');
36
37
            /* Temp Builder 01 (Intro) */
38
            Route::view('builder-01', 'manager/builder-01')->middleware('localOnly')->name('jpb1');
39
            /* Temp Builder 02 (Job info) */
40
            Route::view('builder-02', 'manager/builder-02')->middleware('localOnly')->name('jpb2');
41
            /* Temp Builder 03 (Work Environment) */
42
            Route::view('builder-03', 'manager/builder-03')->middleware('localOnly')->name('jpb3');
43
            /* Temp Builder 04 (Impact) */
44
            Route::view('builder-04', 'manager/builder-04')->middleware('localOnly')->name('jpb4');
45
            /* Temp Builder 05 (Tasks) */
46
            Route::view('builder-05', 'manager/builder-05')->middleware('localOnly')->name('jpb5');
47
            /* Temp Builder 06 (Skills) */
48
            Route::view('builder-06', 'manager/builder-06')->middleware('localOnly')->name('jpb6');
49
            /* Temp Builder 07 (Education) */
50
            Route::view('builder-07', 'manager/builder-07')->middleware('localOnly')->name('jpb7');
51
            /* Temp Builder 08 (Review) */
52
            Route::view('builder-08', 'manager/builder-08')->middleware('localOnly')->name('jpb8');
53
54
            /* Profile (Experience) */
55
            /* Temp Resources */
56
            Route::view('resources', 'common/resources')->middleware('localOnly')->name('resources');
57
58
            /* Application (Welcome Mat) */
59
            Route::view('application-01', 'applicant/application/01-welcome')->middleware('localOnly')->name('app1');
60
            /* Application (Intro Information & Education) */
61
            Route::view('application-02', 'applicant/application/02-info-edu')->middleware('localOnly')->name('app2');
62
            /* Application (Experience Instruction) */
63
            Route::view('application-03', 'applicant/application/03-exp-instructions')->middleware('localOnly')->name('app3');
64
            /* Application (Experience) */
65
            Route::view('application-04', 'applicant/application/04-exp')->middleware('localOnly')->name('app4');
66
            /* Application (Skills Instruction) */
67
            Route::view('application-05', 'applicant/application/05-skill-instructions')->middleware('localOnly')->name('app5');
68
            /* Application (Skills) */
69
            Route::view('application-06', 'applicant/application/06-skill')->middleware('localOnly')->name('app6');
70
            /* Application (Questions) */
71
            Route::view('application-07', 'applicant/application/07-questions')->middleware('localOnly')->name('app7');
72
            /* Application (Review) */
73
            Route::view('application-08', 'applicant/application/08-review')->middleware('localOnly')->name('app8');
74
            /* Application (Signature & Submission) */
75
            Route::view('application-09', 'applicant/application/09-submit')->middleware('localOnly')->name('app9');
76
77
            /* Response Home */
78
            Route::view('response', 'response/index/index')->middleware('localOnly')->name('response.test');
79
            /* Response Screening */
80
            Route::view('response-screening', 'response/screening/index')->middleware('localOnly')->name('responseScreening');
81
82
            Route::view('response/api-test', 'applicant/str_api_test')->middleware('localOnly');
83
        });
84
85
        Route::group(['prefix' => config('app.applicant_prefix')], function (): void {
0 ignored issues
show
The function config was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

85
        Route::group(['prefix' => /** @scrutinizer ignore-call */ config('app.applicant_prefix')], function (): void {
Loading history...
86
87
            Route::get('two-factor/use-recovery-code', 'Auth\RecoveryCodeController@use')->name('recovery_codes.use');
88
            Route::post('two-factor/use-recovery-code', 'Auth\RecoveryCodeController@authenticate')->name('recovery_codes.authenticate');
89
90
            /* Require being logged in */
91
            Route::middleware(['auth'])->group(function (): void {
92
93
                /* Managers */
94
                Route::get('jobs/{jobPoster}/manager', 'ManagerProfileController@show')
95
                    ->middleware('can:view,jobPoster')
96
                    ->name('managers.show');
97
            });
98
99
            /*
100
             * IF user is logged in AND has activated 2fa, require one-time password.
101
             * This should include all routes except those related to authentication, to avoid loops.
102
             */
103
            Route::middleware(['2fa'])->group(function (): void {
104
                Route::post('/2fa', 'Auth\TwoFactorController@redirectToExpected')->name('2fa');
105
106
                /* Home */
107
                Route::get('/', 'HomepageController@applicant')->name('home');
108
109
                /* Jobs */
110
                Route::get('jobs', 'JobController@index')->name('jobs.index');
111
112
                Route::get('jobs/{jobPoster}', 'JobController@show')
113
                    ->middleware('can:view,jobPoster')
114
                    ->name('jobs.summary');
115
116
                /* Response Home */
117
                // Redirect /en/response to /response so it reaches the Talent Reserve app.
118
                Route::redirect('response', URL::to('/response'));
119
120
                /* Reserve Redirect */
121
                Route::redirect('reserve', URL::to('/response'));
122
123
                /* Require being logged in as applicant */
124
                Route::middleware(['auth', 'role:applicant'])->group(function (): void {
125
126
                    // Application permissions are handled within the controller instead of with middleware.
127
                    /* Applications */
128
                    Route::get('applications', 'ApplicationController@index')->name('applications.index');
129
130
                    /* View Application */
131
                    Route::get('applications/{application}', 'ApplicationController@show')
132
                        ->middleware('can:view,application')
133
                        ->name('applications.show');
134
135
                    Route::get('applications/{application}/edit', 'ApplicationTimelineController@show')
136
                        ->middleware('can:update,application')
137
                        ->name('applications.timeline');
138
                    Route::get('applications/{application}/next', 'ApplicationTimelineController@complete')
139
                        ->middleware('can:view,application')
140
                        ->name('applications.timeline.next');
141
                    Route::get('applications/{application}/{step}', 'ApplicationTimelineController@show')
142
                        ->middleware('can:update,application')
143
                        ->name('applications.timeline.step');
144
145
146
                    Route::get('jobs/{jobPoster}/apply', 'JobController@apply')
147
                        ->name('jobs.apply');
148
149
                    /* Step 01 */
150
                    Route::get('jobs/{jobPoster}/application/step-01', 'ApplicationByJobController@editBasics')->name('job.application.edit.1');
151
152
                    /* Step 02 */
153
                    Route::get('jobs/{jobPoster}/application/step-02', 'ApplicationByJobController@editExperience')->name('job.application.edit.2');
154
155
                    /* Step 03 */
156
                    Route::get('jobs/{jobPoster}/application/step-03', 'ApplicationByJobController@editEssentialSkills')->name('job.application.edit.3');
157
158
                    /* Step 04 */
159
                    Route::get('jobs/{jobPoster}/application/step-04', 'ApplicationByJobController@editAssetSkills')->name('job.application.edit.4');
160
161
                    /* Step 05 */
162
                    Route::get('jobs/{jobPoster}/application/step-05', 'ApplicationByJobController@preview')->name('job.application.edit.5');
163
164
                    /* Step 06 */
165
                    Route::get('jobs/{jobPoster}/application/step-06', 'ApplicationByJobController@confirm')->name('job.application.edit.6');
166
167
                    /* Step 06: Complete */
168
                    Route::get('jobs/{jobPoster}/application/complete', 'ApplicationByJobController@complete')->name('job.application.complete');
169
170
                    /* Application Update routes */
171
172
                    /* Step 01 */
173
                    Route::post('jobs/{jobPoster}/application/step-01/update', 'ApplicationByJobController@updateBasics')->name('job.application.update.1');
174
175
                    /* Step 02 */
176
                    Route::post('jobs/{jobPoster}/application/step-02/update', 'ApplicationByJobController@updateExperience')->name('job.application.update.2');
177
178
                    /* Step 03 */
179
                    Route::post('jobs/{jobPoster}/application/step-03/update', 'ApplicationByJobController@updateEssentialSkills')->name('job.application.update.3');
180
181
                    /* Step 04 */
182
                    Route::post('jobs/{jobPoster}/application/step-04/update', 'ApplicationByJobController@updateAssetSkills')->name('job.application.update.4');
183
184
                    /* Step 05 */
185
                    Route::post('jobs/{jobPoster}/application/submit', 'ApplicationByJobController@submit')->name('job.application.submit');
186
187
                    Route::get('profile', 'ApplicantProfileController@editAuthenticated')->name('profile');
188
                    Route::get('profile/about', 'ApplicantProfileController@editAuthenticated');
189
190
                    /* Profile - My Experience */
191
                    Route::get('profile/experience', 'ExperienceController@editAuthenticated');
192
                    Route::get('profile/{applicant}/experience', 'ExperienceController@edit')
193
                        ->middleware('can:view,applicant')
194
                        ->middleware('can:update,applicant')
195
                        ->name('profile.experience.edit');
196
197
                    /* Profile - My Skills */
198
                    Route::get('profile/skills', 'ApplicantSkillsController@editAuthenticated');
199
                    Route::get('profile/{applicant}/skills', 'ApplicantSkillsController@edit')
200
                        ->middleware('can:view,applicant')
201
                        ->middleware('can:update,applicant')
202
                        ->name('profile.skills.edit');
203
204
                    /* Profile - About Me (archived) */
205
                    Route::get('profile/{applicant}/about', 'ApplicantProfileController@edit')
206
                        ->middleware('can:view,applicant')
207
                        ->middleware('can:update,applicant')
208
                        ->name('profile.about.edit');
209
210
                    /* Profile - My Skills Declarations (archived) */
211
                    Route::get('profile/skills-old', 'SkillDeclarationController@editAuthenticated');
212
                    Route::get('profile/{applicant}/skills-old', 'SkillDeclarationController@edit')
213
                        ->middleware('can:view,applicant')
214
                        ->middleware('can:update,applicant')
215
                        ->name('profile.skills-old.edit');
216
217
                    /* Profile - My References  (archived) */
218
                    Route::get('profile/references', 'ReferencesController@editAuthenticated');
219
220
                    Route::get('profile/{applicant}/references', 'ReferencesController@edit')
221
                        ->middleware('can:view,applicant')
222
                        ->middleware('can:update,applicant')
223
                        ->name('profile.references.edit');
224
225
                    /* Profile - My Portfolio (archived) */
226
                    Route::get('profile/portfolio', 'WorkSamplesController@editAuthenticated');
227
228
                    Route::get('profile/{applicant}/portfolio', 'WorkSamplesController@edit')
229
                        ->middleware('can:view,applicant')
230
                        ->middleware('can:update,applicant')
231
                        ->name('profile.work_samples.edit');
232
233
                    /* Account Settings */
234
                    Route::get('settings', 'SettingsController@editAuthenticated')
235
                        // Permission is checked in controller.
236
                        ->name('settings.edit');
237
238
                    Route::post(
239
                        'settings/{user}/personal/update',
240
                        'SettingsController@updatePersonal'
241
                    )
242
                        ->middleware('can:view,user')
243
                        ->middleware('can:update,user')
244
                        ->name('settings.personal.update');
245
246
                    Route::post(
247
                        'settings/{user}/password/update',
248
                        'SettingsController@updatePassword'
249
                    )
250
                        ->middleware('can:view,user')
251
                        ->middleware('can:update,user')
252
                        ->name('settings.password.update');
253
254
                    Route::post(
255
                        'settings/{user}/government/update',
256
                        'SettingsController@updateGovernment'
257
                    )
258
                        ->middleware('can:view,user')
259
                        ->middleware('can:update,user')
260
                        ->name('settings.government.update');
261
262
                    Route::post(
263
                        'settings/{user}/contact-preferences/update',
264
                        'SettingsController@updateContactPreferences'
265
                    )
266
                        ->middleware('can:view,user')
267
                        ->middleware('can:update,user')
268
                        ->name('settings.contact_preferences.update');
269
270
                    Route::post(
271
                        'settings/{user}/account/delete',
272
                        'SettingsController@deleteAccount'
273
                    )
274
                        ->middleware('can:view,user')
275
                        ->middleware('can:update,user')
276
                        ->name('settings.account.delete');
277
278
                    /* 2FA Settings */
279
                    Route::get('two-factor/activate', 'Auth\TwoFactorController@activate')->name('two_factor.activate');
280
                    Route::post('two-factor/deactivate', 'Auth\TwoFactorController@deactivate')->name('two_factor.deactivate');
281
                    Route::post('two-factor/forget', 'Auth\TwoFactorController@forget')->name('two_factor.forget');
282
                    Route::post('two-factor/confirm', 'Auth\TwoFactorController@confirm')->name('two_factor.confirm');
283
284
                    Route::post('two-factor/generate-recovery-codes', 'Auth\RecoveryCodeController@generate')->name('recovery_codes.generate');
285
                    Route::get('two-factor/recovery-codes', 'Auth\RecoveryCodeController@show')->name('recovery_codes.show');
286
                });
287
288
                /* Static - FAQ */
289
                Route::get('faq', 'FaqController')->name('faq');
290
291
                /* Static - Privacy Policy */
292
                Route::view(
293
                    'privacy',
294
                    'common/static_privacy',
295
                    [
296
                        'privacy' => Lang::get('common/privacy'),
297
                        'custom_breadcrumbs' => [
298
                            'home' => LaravelLocalization::localizeUrl('/'),
299
                            Lang::get('common/privacy.title') => '',
300
                        ],
301
                    ]
302
                )->name('privacy');
303
304
                /* Static - Terms of Service */
305
                Route::view(
306
                    'tos',
307
                    'common/static_tos',
308
                    [
309
                        'tos' => Lang::get('common/tos'),
310
                        'custom_breadcrumbs' => [
311
                            'home' => LaravelLocalization::localizeUrl('/'),
312
                            Lang::get('common/tos.title') => '',
313
                        ],
314
                    ]
315
                )->name('tos');
316
317
                /* Static - ITP */
318
                Route::view('indigenous', 'common/static-itp', ['itp' => Lang::get('common/itp')])->name('itp');
319
            });
320
321
            /* Authentication =========================================================== */
322
323
            // Laravel default login, logout, register, and reset routes.
324
            Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
325
            Route::post('login', 'Auth\LoginController@login')->name('login.post');
326
            Route::post('logout', 'Auth\LoginController@logout')->name('logout');
327
328
            // Registration Routes...
329
            Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
330
            Route::post('register', 'Auth\RegisterController@register')->name('register.post');
331
332
            // Password Reset Routes...
333
            Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
334
            Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
335
            Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
336
            Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.reset.post');
337
        });
338
339
        /* Manager Portal =========================================================== */
340
        Route::group(['prefix' => config('app.manager_prefix')], function (): void {
341
342
            Route::middleware(['finishManagerRegistration'])->group(function (): void {
343
344
                Route::get('two-factor/use-recovery-code', 'Auth\RecoveryCodeController@use')->name('manager.recovery_codes.use');
345
                Route::post('two-factor/use-recovery-code', 'Auth\RecoveryCodeController@authenticate')->name('manager.recovery_codes.authenticate');
346
347
                /*
348
                 * IF user is logged in AND has activated 2fa, require one-time password.
349
                 * This should include all routes except those related to authentication, to avoid loops.
350
                 */
351
                Route::middleware(['2fa'])->group(function (): void {
352
353
                    Route::post('/2fa', 'Auth\TwoFactorController@redirectToExpected')->name('manager.2fa');
354
355
                    /* Home */
356
                    Route::get('/', 'HomepageController@manager')->name('manager.home');
357
358
                    /* Static - FAQ */
359
                    Route::get(
360
                        'faq',
361
                        'ManagerProfileController@faq'
362
                    )->name('manager.faq');
363
364
                    Route::get(
365
                        'faq#managers',
366
                        'ManagerProfileController@faq'
367
                    )->name('manager.faq.section');
368
369
                    Route::middleware(['auth', 'role:manager'])->group(function (): void {
370
371
                        Route::get('profile', 'ManagerProfileController@editAuthenticated')->name('manager.profile');
372
373
                        /* Profile */
374
                        Route::get('profile/{manager}', 'ManagerProfileController@edit')
375
                            ->middleware('can:view,manager')
376
                            ->middleware('can:update,manager')
377
                            ->name('manager.profile.edit');
378
379
                        Route::post('profile/{manager}/update', 'ManagerProfileController@update')
380
                            ->middleware('can:update,manager')
381
                            ->name('manager.profile.update');
382
383
                        /* Reviewing applications/applicants requires two-factor authentication */
384
                        // TODO: Eventually we'll want to wrap the routes for viewing applications in the 2fa.required middleware
385
                        Route::get('jobs/{jobPoster}/applications', 'ApplicationByJobController@index')
386
                            ->where('jobPoster', '[0-9]+')
387
                            ->middleware('can:reviewApplicationsFor,jobPoster')
388
                            ->name('manager.jobs.applications');
389
390
                        /* View Application */
391
                        Route::get(
392
                            'jobs/{jobPoster}/applications/{application}',
393
                            'ApplicationController@showWithToolbar'
394
                        )
395
                            ->middleware('can:manage,jobPoster')
396
                            ->middleware('can:view,application')
397
                            ->name('manager.applications.show');
398
399
                        /* View Applicant Profile with Job */
400
                        Route::get('jobs/{jobPoster}/applicants/{applicant}', 'ApplicantProfileController@showWithJob')
401
                            ->middleware('can:manage,jobPoster')
402
                            ->middleware('can:view,applicant')
403
                            ->name('manager.applicants.show');
404
405
                        /* Job Index */
406
                        Route::get('jobs', 'JobController@managerIndex')->name('manager.jobs.index');
407
408
                        /* View Job Poster */
409
                        Route::get('jobs/{jobPoster}/preview', 'JobController@show')
410
                            ->where('jobPoster', '[0-9]+')
411
                            ->middleware('can:view,jobPoster')
412
                            ->name('manager.jobs.preview');
413
414
                        /* View Job Summary */
415
                        Route::get('jobs/{jobPoster}', 'JobSummaryController@show')
416
                            ->middleware('can:manage,jobPoster')
417
                            ->name('manager.jobs.summary')
418
                            ->where('jobPoster', '[0-9]+');
419
420
                        /* Job Builder */
421
                        Route::get(
422
                            'jobs/builder',
423
                            'JobBuilderController@show'
424
                        )->name('manager.jobs.create');
425
426
                        Route::get(
427
                            'jobs/{jobPoster}/builder',
428
                            'JobBuilderController@show'
429
                        )
430
                            ->where('jobPoster', '[0-9]+')
431
                            ->name('manager.jobs.edit');
432
433
                        Route::get(
434
                            'jobs/{jobPoster}/builder/intro',
435
                            'JobBuilderController@show'
436
                        )->where('jobPoster', '[0-9]+');
437
438
                        Route::get(
439
                            'jobs/{jobPoster}/builder/details',
440
                            'JobBuilderController@show'
441
                        )->where('jobPoster', '[0-9]+');
442
443
                        Route::get(
444
                            'jobs/{jobPoster}/builder/environment',
445
                            'JobBuilderController@show'
446
                        )->where('jobPoster', '[0-9]+');
447
448
                        Route::get(
449
                            'jobs/{jobPoster}/builder/impact',
450
                            'JobBuilderController@show'
451
                        )->where('jobPoster', '[0-9]+');
452
453
                        Route::get(
454
                            'jobs/{jobPoster}/builder/tasks',
455
                            'JobBuilderController@show'
456
                        )->where('jobPoster', '[0-9]+');
457
458
                        Route::get(
459
                            'jobs/{jobPoster}/builder/skills',
460
                            'JobBuilderController@show'
461
                        )->where('jobPoster', '[0-9]+');
462
463
                        Route::get(
464
                            'jobs/{jobPoster}/builder/review',
465
                            'JobBuilderController@show'
466
                        )
467
                            ->where('jobPoster', '[0-9]+')
468
                            ->name('manager.jobs.review');
469
470
                        /* Delete Job */
471
                        Route::delete('jobs/{jobPoster}', 'JobController@destroy')
472
                            ->where('jobPoster', '[0-9]+')
473
                            ->middleware('can:delete,jobPoster')
474
                            ->name('manager.jobs.destroy');
475
                        Route::post(
476
                            'jobs/{jobPoster}/status/{status}',
477
                            'JobStatusController@setJobStatus'
478
                        )
479
                            ->middleware('can:manage,jobPoster')
480
                            ->where('jobPoster', '[0-9]+')
481
                            ->name('manager.jobs.setJobStatus');
482
483
                        /* Screening Plan Builder */
484
                        Route::get(
485
                            'jobs/{jobPoster}/assessment-plan',
486
                            'AssessmentPlanController@show'
487
                        )
488
                            ->middleware('can:viewAssessmentPlan,jobPoster')
489
                            ->where('jobPoster', '[0-9]+')
490
                            ->name('manager.jobs.screening_plan');
491
492
                        /* Account Settings */
493
                        Route::get('settings', 'SettingsController@editAuthenticated')
494
                            // Permissions are checked in Controller.
495
                            ->name('manager.settings.edit');
496
497
                        Route::post(
498
                            'settings/{user}/personal/update',
499
                            'SettingsController@updatePersonal'
500
                        )
501
                            ->middleware('can:view,user')
502
                            ->middleware('can:update,user')
503
                            ->name('manager.settings.personal.update');
504
505
                        Route::post(
506
                            'settings/{user}/password/update',
507
                            'SettingsController@updatePassword'
508
                        )
509
                            ->middleware('can:view,user')
510
                            ->middleware('can:update,user')
511
                            ->name('manager.settings.password.update');
512
513
                        Route::post(
514
                            'settings/{user}/government/update',
515
                            'SettingsController@updateGovernment'
516
                        )
517
                            ->middleware('can:view,user')
518
                            ->middleware('can:update,user')
519
                            ->name('manager.settings.government.update');
520
521
                        Route::post(
522
                            'settings/{user}/contact-preferences/update',
523
                            'SettingsController@updateContactPreferences'
524
                        )
525
                            ->middleware('can:view,user')
526
                            ->middleware('can:update,user')
527
                            ->name('manager.settings.contact_preferences.update');
528
529
                        Route::post(
530
                            'settings/{user}/account/delete',
531
                            'SettingsController@deleteAccount'
532
                        )
533
                            ->middleware('can:view,user')
534
                            ->middleware('can:update,user')
535
                            ->name('manager.settings.account.delete');
536
537
                        Route::get('resources', 'ResourcesController@show')
538
                            ->middleware('can:view-resources')
539
                            ->name('manager.resources');
540
541
                        /* Two-factor Authentication */
542
                        Route::get('two-factor/activate', 'Auth\TwoFactorController@activate')->name('manager.two_factor.activate');
543
                        Route::post('two-factor/deactivate', 'Auth\TwoFactorController@deactivate')->name('manager.two_factor.deactivate');
544
                        Route::post('two-factor/forget', 'Auth\TwoFactorController@forget')->name('manager.two_factor.forget');
545
                        Route::post('two-factor/confirm', 'Auth\TwoFactorController@confirm')->name('manager.two_factor.confirm');
546
547
                        Route::post('two-factor/generate-recovery-codes', 'Auth\RecoveryCodeController@generate')->name('manager.recovery_codes.generate');
548
                        Route::get('two-factor/recovery-codes', 'Auth\RecoveryCodeController@show')->name('manager.recovery_codes.show');
549
                    });
550
                });
551
            });
552
553
            // These routes must be excluded from the finishManagerRegistration middleware
554
            // to avoid an infinite loop of redirects.
555
            Route::middleware(['auth', 'role:manager'])->group(function (): void {
556
                Route::get('first-visit', 'Auth\FirstVisitController@showFirstVisitManagerForm')
557
                    ->name('manager.first_visit');
558
                Route::post('finish_registration', 'Auth\FirstVisitController@finishManagerRegistration')
559
                    ->name('manager.finish_registration');
560
            });
561
562
            // Laravel default login, logout, register, and reset routes.
563
            Route::get('login', 'Auth\LoginController@showLoginForm')->name('manager.login');
564
            Route::post('login', 'Auth\LoginController@login')->name('manager.login.post');
565
            Route::post('logout', 'Auth\LoginController@logout')->name('manager.logout');
566
567
            // Registration Routes...
568
            Route::get('register', 'Auth\RegisterController@showManagerRegistrationForm')->name('manager.register');
569
            Route::post('register', 'Auth\RegisterController@registerManager')->name('manager.register.post');
570
571
            // Password Reset Routes...
572
            Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('manager.password.request');
573
            Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('manager.password.email');
574
            Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('manager.password.reset');
575
            Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('manager.password.reset.post');
576
        });
577
578
        /* AJAX calls =============================================================== */
579
580
        /* Require being logged in */
581
        Route::middleware(['auth'])->group(function (): void {
582
583
            Route::delete('applications/{application}', 'ApplicationController@destroy')
584
                ->middleware('can:delete,application')
585
                ->name('applications.destroy');
586
        });
587
588
        /* Non-Backpack Admin Portal (localized pages) =========================================================== */
589
        Route::group(
590
            [
591
                'prefix' => 'admin',
592
                'middleware' => ['auth', 'role:admin']
593
            ],
594
            function (): void {
595
                /* Edit Job */
596
                Route::get('jobs/{jobPoster}/edit', 'JobController@edit')
597
                    ->where('jobPoster', '[0-9]+')
598
                    ->middleware('can:update,jobPoster')
599
                    ->name('admin.jobs.edit');
600
                Route::post('jobs/{jobPoster}', 'JobController@store')
601
                    ->where('jobPoster', '[0-9]+')
602
                    ->middleware('can:update,jobPoster')
603
                    ->name('admin.jobs.update');
604
            }
605
        );
606
607
        /* HR Advisor Portal =========================================================== */
608
609
        Route::group([
610
            'prefix' => config('app.hr_prefix'),
611
        ], function (): void {
612
613
            Route::middleware(['finishHrRegistration'])->group(function (): void {
614
615
                Route::get('two-factor/use-recovery-code', 'Auth\RecoveryCodeController@use')->name('hr_advisor.recovery_codes.use');
616
                Route::post('two-factor/use-recovery-code', 'Auth\RecoveryCodeController@authenticate')->name('hr_advisor.recovery_codes.authenticate');
617
618
                /*
619
                 * IF user is logged in AND has activated 2fa, require one-time password.
620
                 * This should include all routes except those related to authentication, to avoid loops.
621
                 */
622
                Route::middleware(['2fa'])->group(function (): void {
623
624
                    Route::post('/2fa', 'Auth\TwoFactorController@redirectToExpected')->name('hr_advisor.2fa');
625
626
                    Route::get('/', 'HomepageController@hr_advisor')->name('hr_advisor.home');
627
628
                    Route::middleware(['auth', 'role:hr_advisor'])->group(function (): void {
629
630
                        Route::get('jobs', 'JobController@hrIndex')->name('hr_advisor.jobs.index');
631
632
                        /* Application Index */
633
                        Route::get('jobs/{jobPoster}/applications', 'ApplicationByJobController@index')
634
                            ->where('jobPoster', '[0-9]+')
635
                            ->middleware('can:reviewApplicationsFor,jobPoster')
636
                            ->name('hr_advisor.jobs.applications');
637
638
                        /* View Application */
639
                        Route::get(
640
                            'jobs/{jobPoster}/applications/{application}',
641
                            'ApplicationController@showWithToolbar'
642
                        )
643
                            ->middleware('can:manage,jobPoster')
644
                            ->middleware('can:view,application')
645
                            ->name('hr_advisor.applications.show');
646
647
                        /* View Applicant Profile */
648
                        Route::get('jobs/{jobPoster}/applicants/{applicant}', 'ApplicantProfileController@showWithJob')
649
                            ->middleware('can:manage,jobPoster')
650
                            ->middleware('can:view,applicant')
651
                            ->name('hr_advisor.applicants.show');
652
653
                        Route::get('jobs/{jobPoster}', 'JobSummaryController@show')
654
                            ->middleware('can:manage,jobPoster')
655
                            ->name('hr_advisor.jobs.summary')
656
                            ->where('jobPoster', '[0-9]+');
657
658
                        Route::post('jobs/{job}/unclaim', 'JobSummaryController@unclaimJob')
659
                            ->name('hr_advisor.jobs.unclaim')
660
                            ->middleware('can:unClaim,job')
661
                            ->where('job', '[0-9]+');
662
663
                        Route::get(
664
                            'jobs/{jobPoster}/assessment-plan',
665
                            'AssessmentPlanController@show'
666
                        )
667
                            ->middleware('can:viewAssessmentPlan,jobPoster')
668
                            ->where('jobPoster', '[0-9]+')
669
                            ->name('hr_advisor.jobs.screening_plan');
670
671
                        Route::get(
672
                            'jobs/{jobPoster}/review',
673
                            'JobBuilderController@hrReview'
674
                        )
675
                            ->middleware('can:manage,jobPoster')
676
                            ->where('job', '[0-9]+')
677
                            ->name('hr_advisor.jobs.review');
678
679
                        Route::get(
680
                            'jobs/{jobPoster}/preview',
681
                            'JobController@show'
682
                        )
683
                            ->middleware('can:view,jobPoster')
684
                            ->where('jobPoster', '[0-9]+')
685
                            ->name('hr_advisor.jobs.preview');
686
687
                        Route::post(
688
                            'jobs/{jobPoster}/status/{status}',
689
                            'JobStatusController@setJobStatus'
690
                        )
691
                            ->middleware('can:manage,jobPoster')
692
                            ->where('jobPoster', '[0-9]+')
693
                            ->name('hr_advisor.jobs.setJobStatus');
694
695
                        /* Account Settings */
696
                        Route::get('settings', 'SettingsController@editAuthenticated')
697
                            // Permissions are checked in Controller.
698
                            ->name('hr_advisor.settings.edit');
699
700
                        Route::post(
701
                            'settings/{user}/personal/update',
702
                            'SettingsController@updatePersonal'
703
                        )
704
                            ->middleware('can:view,user')
705
                            ->middleware('can:update,user')
706
                            ->name('hr_advisor.settings.personal.update');
707
708
                        Route::post(
709
                            'settings/{user}/password/update',
710
                            'SettingsController@updatePassword'
711
                        )
712
                            ->middleware('can:view,user')
713
                            ->middleware('can:update,user')
714
                            ->name('hr_advisor.settings.password.update');
715
716
                        Route::post(
717
                            'settings/{user}/government/update',
718
                            'SettingsController@updateGovernment'
719
                        )
720
                            ->middleware('can:view,user')
721
                            ->middleware('can:update,user')
722
                            ->name('hr_advisor.settings.government.update');
723
724
                        Route::post(
725
                            'settings/{user}/contact-preferences/update',
726
                            'SettingsController@updateContactPreferences'
727
                        )
728
                            ->middleware('can:view,user')
729
                            ->middleware('can:update,user')
730
                            ->name('hr_advisor.settings.contact_preferences.update');
731
732
                        Route::get('resources', 'ResourcesController@show')
733
                            ->middleware('can:view-resources')
734
                            ->name('hr_advisor.resources');
735
736
                        /* Two-factor Authentication */
737
                        Route::get('two-factor/activate', 'Auth\TwoFactorController@activate')->name('hr_advisor.two_factor.activate');
738
                        Route::post('two-factor/deactivate', 'Auth\TwoFactorController@deactivate')->name('hr_advisor.two_factor.deactivate');
739
                        Route::post('two-factor/forget', 'Auth\TwoFactorController@forget')->name('hr_advisor.two_factor.forget');
740
                        Route::post('two-factor/confirm', 'Auth\TwoFactorController@confirm')->name('hr_advisor.two_factor.confirm');
741
742
                        Route::post('two-factor/generate-recovery-codes', 'Auth\RecoveryCodeController@generate')->name('hr_advisor.recovery_codes.generate');
743
                        Route::get('two-factor/recovery-codes', 'Auth\RecoveryCodeController@show')->name('hr_advisor.recovery_codes.show');
744
                    });
745
                });
746
            });
747
            // These routes must be excluded from the finishHrAdvisorRegistration middleware to avoid an infinite loop of redirects
748
            Route::middleware(['auth', 'role:hr_advisor'])->group(function (): void {
749
                Route::get('first-visit', 'Auth\FirstVisitController@showFirstVisitHrForm')
750
                    ->name('hr_advisor.first_visit');
751
                Route::post('finish_registration', 'Auth\FirstVisitController@finishHrRegistration')
752
                    ->name('hr_advisor.finish_registration');
753
            });
754
755
            // Laravel default login, logout, register, and reset routes
756
            Route::get('login', 'Auth\LoginController@showLoginForm')->name('hr_advisor.login');
757
            Route::post('login', 'Auth\LoginController@login')->name('hr_advisor.login.post');
758
            Route::post('logout', 'Auth\LoginController@logout')->name('hr_advisor.logout');
759
760
            // Registration Routes...
761
            Route::get('register', 'Auth\RegisterController@showHrRegistrationForm')->name('hr_advisor.register');
762
            Route::post('register', 'Auth\RegisterController@registerHrAdvisor')->name('hr_advisor.register.post');
763
764
            // Password Reset Routes...
765
            Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('hr_advisor.password.request');
766
            Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('hr_advisor.password.email');
767
            Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('hr_advisor.password.reset');
768
            Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('hr_advisor.password.reset.post');
769
        });
770
771
        /* Non-Backpack Admin Portal (non-localized pages) =========================================================== */
772
        Route::group(
773
            [
774
                'prefix' => 'admin',
775
                'middleware' => ['auth', 'role:admin']
776
            ],
777
            function (): void {
778
                // This page is non-localized, because the middleware that redirects to localized
779
                // pages changes POSTs to GETs and messes up the request.
780
                Route::match(['get','post'], 'jobs/create/as-manager/{manager}', 'JobController@createAsManager')
781
                    ->middleware('can:create,App\Models\JobPoster')
782
                    ->name('admin.jobs.create_as_manager');
783
784
                Route::post('/2fa', 'Auth\TwoFactorController@redirectToExpected')->name('admin.2fa');
785
786
                Route::get('two-factor/activate', 'Auth\TwoFactorController@activate')->name('admin.two_factor.activate');
787
                Route::post('two-factor/deactivate', 'Auth\TwoFactorController@deactivate')->name('admin.two_factor.deactivate');
788
                Route::post('two-factor/forget', 'Auth\TwoFactorController@forget')->name('admin.two_factor.forget');
789
                Route::post('two-factor/confirm', 'Auth\TwoFactorController@confirm')->name('admin.two_factor.confirm');
790
791
                Route::post('two-factor/generate-recovery-codes', 'Auth\RecoveryCodeController@generate')->name('admin.recovery_codes.generate');
792
                Route::get('two-factor/recovery-codes', 'Auth\RecoveryCodeController@show')->name('admin.recovery_codes.show');
793
794
                Route::get('{jobPoster}/download-applicants', 'JobController@downloadApplicants')
795
                    ->middleware('can:downloadApplicants,jobPoster')
796
                    ->name('admin.jobs.download.applicants');
797
798
                /* View Applicant Profile */
799
                Route::get('applicants/{applicant}', 'ApplicantProfileController@profile')
800
                    ->middleware('can:view,applicant')
801
                    ->name('admin.applicants.profile');
802
            }
803
        );
804
    }
805
);
806
807
/* ALL NON-LOCALIZED ROUTES **/
808
809
/* API routes - currently using same default http auth, but not localized */
810
Route::prefix('api/v1')->name('api.v1.')->group(function (): void {
811
    // Protected by a gate in the controller, instead of policy middleware.
812
    Route::get('jobs/{jobPoster}/assessment-plan', 'AssessmentPlanController@getForJob')
813
        ->middleware('can:viewAssessmentPlan,jobPoster')
814
        ->where('jobPoster', '[0-9]+');
815
    Route::get('users', 'Api\UserController@index');
816
    Route::get('users/{user}', 'Api\UserController@show')
817
        ->where('user', '[0-9]+');
818
819
    // Public, not protected by policy or gate.
820
    Route::get('award-recipient-types', 'Api\AwardRecipientTypeController@index');
821
    Route::get('award-recognition-types', 'Api\AwardRecognitionTypeController@index');
822
    Route::get('education-statuses', 'Api\EducationStatusController@index');
823
    Route::get('education-types', 'Api\EducationTypeController@index');
824
    Route::get('departments', 'Api\DepartmentController@index');
825
    Route::get('job-poster-statuses', 'Api\JobStatusController@index');
826
    Route::get('skills', 'Api\SkillController@index');
827
    Route::get('skill-categories', 'Api\SkillCategoryController@index');
828
829
    // Resource Routes are protected by policies in controllers instead of middleware.
830
    Route::resource('assessments', 'AssessmentController')->except([
831
        'create', 'edit', 'index'
832
    ]);
833
    Route::apiResource('rating-guide-answers', 'RatingGuideAnswerController')->except([
834
        'index'
835
    ])->parameters([
836
        'rating-guide-answers' => 'ratingGuideAnswer'
837
    ]);
838
    Route::resource('rating-guide-questions', 'RatingGuideQuestionController')->except([
839
        'create', 'edit', 'index'
840
    ]);
841
    Route::resource('assessment-plan-notifications', 'AssessmentPlanNotificationController')->except([
842
        'store', 'create', 'edit'
843
    ]);
844
    // TODO: add policy middleware
845
    Route::get('jobs/{jobPoster}/tasks', 'Api\JobPosterKeyTaskController@indexByJob')
846
        ->where('jobPoster', '[0-9]+')
847
        ->middleware('can:view,jobPoster');
848
    Route::put('jobs/{jobPoster}/tasks', 'Api\JobPosterKeyTaskController@batchUpdate')
849
        ->where('jobPoster', '[0-9]+')
850
        ->middleware('can:update,jobPoster');
851
852
    Route::get('jobs/{jobPoster}/criteria', 'Api\CriteriaController@indexByJob')
853
        ->where('jobPoster', '[0-9]+')
854
        ->middleware('can:view,jobPoster');
855
    Route::put('jobs/{jobPoster}/criteria', 'Api\CriteriaController@batchUpdate')
856
        ->where('jobPoster', '[0-9]+')
857
        ->middleware('can:update,jobPoster');
858
859
    Route::put(
860
        'jobs/{jobPoster}/status/{status}',
861
        'JobStatusController@setJobStatus'
862
    )
863
        ->middleware('can:manage,jobPoster')
864
        ->where('jobPoster', '[0-9]+')
865
        ->name('jobs.setJobStatus');
866
    Route::resource('jobs', 'Api\JobController')->only([
867
        'show', 'store', 'update', 'index'
868
    ])->names([ // Specify custom names because default names collided with existing routes.
869
        'show' => 'jobs.show',
870
        'store' => 'jobs.store',
871
        'update' => 'jobs.update',
872
        'index' => 'jobs.index'
873
    ]);
874
875
    Route::put('applications/{application}/review', 'ApplicationReviewController@updateForApplication')
876
        ->middleware('can:review,application')
877
        ->name('application_reviews.update');
878
879
    Route::get('applications/{application}/reference-emails/', 'Api\MicroReferenceController@index')
880
        ->middleware('can:review,application')
881
        ->name('api.application.reference_mail.index');
882
    Route::get('applications/{application}/reference-emails/director', 'Api\MicroReferenceController@showDirectorEmail')
883
        ->middleware('can:review,application')
884
        ->name('api.application.reference_mail.director.show');
885
    Route::post('applications/{application}/reference-emails/director/send', 'Api\MicroReferenceController@sendDirectorEmail')
886
        ->middleware('can:review,application')
887
        ->name('api.application.reference_mail.director.send');
888
    Route::get('applications/{application}/reference-emails/secondary', 'Api\MicroReferenceController@showSecondaryReferenceEmail')
889
        ->middleware('can:review,application')
890
        ->name('api.application.reference_mail.secondary.show');
891
    Route::post('applications/{application}/reference-emails/secondary/send', 'Api\MicroReferenceController@sendSecondaryReferenceEmail')
892
        ->middleware('can:review,application')
893
        ->name('api.application.reference_mail.secondary.send');
894
895
    Route::resource('managers', 'Api\ManagerController')->only([
896
        'show', 'update'
897
    ])->names([ // Specify custom names because default names collided with existing routes.
898
        'show' => 'managers.show',
899
        'update' => 'managers.update'
900
    ]);
901
902
    // User must be logged in to user currentuser routes
903
    Route::get('currentuser/manager', 'Api\ManagerController@showAuthenticated')
904
        ->middleware('auth');
905
906
    // Comment model routes
907
    Route::get('jobs/{jobPoster}/comments', 'Api\CommentApiController@indexByJob')
908
        ->where('jobPoster', '[0-9]+')
909
        ->middleware('can:viewComments,jobPoster');
910
    Route::post('jobs/{jobPoster}/comments', 'Api\CommentApiController@store')
911
        ->where('jobPoster', '[0-9]+')
912
        ->middleware('can:storeComment,jobPoster');
913
914
    // Claim / unclaim job routes, HR portal
915
    Route::put('jobs/{job}/claim', 'Api\ClaimJobApiController@store')
916
        ->middleware('can:claim,job')
917
        ->where('job', '[0-9]+');
918
    Route::delete('jobs/{job}/claim', 'Api\ClaimJobApiController@destroy')
919
        ->middleware('can:unClaim,job')
920
        ->where('job', '[0-9]+');
921
922
    Route::get('hr-advisors/{hrAdvisor}', 'Api\HrAdvisorController@show')
923
        ->middleware('can:view,hrAdvisor');
924
925
    Route::put('hr-advisors/{hrAdvisor}/claims/{job}', 'Api\ClaimJobApiController@claimJob')
926
        ->middleware('can:update,hrAdvisor')
927
        ->where('hrAdvisor', '[0-9]+')
928
        ->where('job', '[0-9]+');
929
    Route::delete('hr-advisors/{hrAdvisor}/claims/{job}', 'Api\ClaimJobApiController@unclaimJob')
930
        ->middleware('can:update,hrAdvisor')
931
        ->where('hrAdvisor', '[0-9]+')
932
        ->where('job', '[0-9]+');
933
934
    Route::get('applicants/{applicant}/experience', 'Api\ExperienceController@indexForApplicant')
935
        ->where('applicant', '[0-9]+')
936
        ->middleware('can:view,applicant')
937
        ->name('applicant.experience.index');
938
939
    Route::post('applicants/{applicant}/experience-work', 'Api\ExperienceController@storeWork')
940
        ->where('applicant', '[0-9]+')
941
        ->middleware('can:update,applicant')
942
        ->name('applicant.experience-work.store');
943
    Route::post('applicants/{applicant}/experience-personal', 'Api\ExperienceController@storePersonal')
944
        ->where('applicant', '[0-9]+')
945
        ->middleware('can:update,applicant')
946
        ->name('applicant.experience-personal.store');
947
    Route::post('applicants/{applicant}/experience-education', 'Api\ExperienceController@storeEducation')
948
        ->where('applicant', '[0-9]+')
949
        ->middleware('can:update,applicant')
950
        ->name('applicant.experience-education.store');
951
    Route::post('applicants/{applicant}/experience-award', 'Api\ExperienceController@storeAward')
952
        ->where('applicant', '[0-9]+')
953
        ->middleware('can:update,applicant')
954
        ->name('applicant.experience-award.store');
955
    Route::post('applicants/{applicant}/experience-community', 'Api\ExperienceController@storeCommunity')
956
        ->where('applicant', '[0-9]+')
957
        ->middleware('can:update,applicant')
958
        ->name('applicant.experience-community.store');
959
960
    Route::get('applicants/{applicant}/skills', 'Api\ApplicantSkillsController@index')
961
        ->where('applicant', '[0-9]+')
962
        ->middleware('can:view,applicant')
963
        ->name('applicant.skills.index');
964
    Route::put('applicants/{applicant}/skills', 'Api\ApplicantSkillsController@update')
965
        ->where('applicant', '[0-9]+')
966
        ->middleware('can:update,applicant')
967
        ->name('applicant.skills.update');
968
969
    Route::put('experience-work/{work}', 'Api\ExperienceController@updateWork')
970
        ->where('work', '[0-9]+')
971
        ->middleware('can:update,work')
972
        ->name('experience-work.update');
973
    Route::put('experience-personal/{personal}', 'Api\ExperienceController@updatePersonal')
974
        ->where('personal', '[0-9]+')
975
        ->middleware('can:update,personal')
976
        ->name('experience-personal.update');
977
    Route::put('experience-education/{education}', 'Api\ExperienceController@updateEducation')
978
        ->where('education', '[0-9]+')
979
        ->middleware('can:update,education')
980
        ->name('experience-education.update');
981
    Route::put('experience-award/{award}', 'Api\ExperienceController@updateAward')
982
        ->where('award', '[0-9]+')
983
        ->middleware('can:update,award')
984
        ->name('experience-award.update');
985
    Route::put('experience-community/{community}', 'Api\ExperienceController@updateCommunity')
986
        ->where('community', '[0-9]+')
987
        ->middleware('can:update,community')
988
        ->name('experience-community.update');
989
990
    Route::delete('experience-work/{work}', 'Api\ExperienceController@destroyWork')
991
        ->where('work', '[0-9]+')
992
        ->middleware('can:delete,work')
993
        ->name('experience-work.destroy');
994
    Route::delete('experience-personal/{personal}', 'Api\ExperienceController@destroyPersonal')
995
        ->where('personal', '[0-9]+')
996
        ->middleware('can:delete,personal')
997
        ->name('experience-personal.destroy');
998
    Route::delete('experience-education/{education}', 'Api\ExperienceController@destroyEducation')
999
        ->where('education', '[0-9]+')
1000
        ->middleware('can:delete,education')
1001
        ->name('experience-education.destroy');
1002
    Route::delete('experience-award/{award}', 'Api\ExperienceController@destroyAward')
1003
        ->where('award', '[0-9]+')
1004
        ->middleware('can:delete,award')
1005
        ->name('experience-award.destroy');
1006
    Route::delete('experience-community/{community}', 'Api\ExperienceController@destroyCommunity')
1007
        ->where('community', '[0-9]+')
1008
        ->middleware('can:delete,community')
1009
        ->name('experience-community.destroy');
1010
1011
    Route::get('applicants/{applicant}/experience-skills', 'Api\ExperienceSkillsController@indexForApplicant')
1012
        ->where('applicant', '[0-9]+')
1013
        ->middleware('can:view,applicant')
1014
        ->name('applicant.experience-skill.index');
1015
    Route::post('experience-skills', 'Api\ExperienceSkillsController@store')
1016
        ->middleware('can:create,App\Models\ExperienceSkill')
1017
        ->name('experience-skill.store');
1018
    Route::put('experience-skills/{experienceSkill}', 'Api\ExperienceSkillsController@update')
1019
        ->where('experienceSkill', '[0-9]+')
1020
        ->middleware('can:update,experienceSkill')
1021
        ->name('experience-skill.update');
1022
    Route::delete('experience-skills/{experienceSkill}', 'Api\ExperienceSkillsController@destroy')
1023
        ->where('experienceSkill', '[0-9]+')
1024
        ->middleware('can:delete,experienceSkill')
1025
        ->name('experience-skill.destroy');
1026
1027
    Route::post('experience-skills/batch-store', 'Api\ExperienceSkillsController@batchStore')
1028
        ->middleware('can:create,App\Models\ExperienceSkill')
1029
        ->name('experience-skill.batch-store');
1030
    Route::post('experience-skills/batch-update', 'Api\ExperienceSkillsController@batchUpdate')
1031
        ->name('experience-skill.batch-update');
1032
    Route::post('experience-skills/batch-destroy', 'Api\ExperienceSkillsController@batchDestroy')
1033
        ->name('experience-skill.batch-destroy');
1034
1035
1036
    Route::post('job-application-answers', 'Api\JobApplicationAnswerController@store')
1037
        ->middleware('can:create,App\Models\JobApplicationAnswer')
1038
        ->name('job-application-answers.store');
1039
    Route::put('job-application-answers/{jobApplicationAnswer}', 'Api\JobApplicationAnswerController@update')
1040
        ->where('jobApplicationAnswer', '[0-9]+')
1041
        ->middleware('can:update,jobApplicationAnswer')
1042
        ->name('job-application-answers.update');
1043
1044
    Route::get('classifications', 'Api\ClassificationController@index');
1045
        //->middleware('can:view,application');
1046
1047
    Route::get('applicant/{applicant}/profile', 'Api\ApplicantController@getProfile')
1048
        ->where('applicant', '[0-9]+')
1049
        ->middleware('can:view,applicant')
1050
        ->name('applicant.profile');
1051
    Route::put('applicant/{applicant}/profile', 'Api\ApplicantController@updateProfile')
1052
        ->where('applicant', '[0-9]+')
1053
        ->middleware('can:update,applicant')
1054
        ->name('applicant.profile.update');
1055
});
1056
1057
Route::prefix('api/v2')->name('api.v2.')->group(function (): void {
1058
    Route::get('applications/{application}', 'Api\ApplicationController@show')
1059
        ->where('application', '[0-9]+')
1060
        ->middleware('can:view,application')
1061
        ->name('application.show');
1062
    Route::get('applications/{application}/basic', 'Api\ApplicationController@getBasic')
1063
        ->where('application', '[0-9]+')
1064
        ->middleware('can:view,application')
1065
        ->name('application.basic');
1066
    Route::put('applications/{application}/basic', 'Api\ApplicationController@updateBasic')
1067
        ->where('application', '[0-9]+')
1068
        ->middleware('can:update,application')
1069
        ->name('application.basic.update');
1070
    Route::put('applications/{application}/submit', 'Api\ApplicationController@submit')
1071
        ->where('application', '[0-9]+')
1072
        ->middleware('can:update,application')
1073
        ->name('application.submit');
1074
    Route::get('jobs/{jobPoster}/applications', 'Api\ApplicationController@index')
1075
        ->where('jobPoster', '[0-9]+')
1076
        ->middleware('can:reviewApplicationsFor,jobPoster')
1077
        ->name('jobs.applications');
1078
    Route::put('applications/{application}/review', 'Api\ApplicationController@updateReview')
1079
        ->where('application', '[0-9]+')
1080
        ->middleware('can:review,application')
1081
        ->name('application.review.update');
1082
    Route::post('application-reviews/batch-update', 'Api\ApplicationReviewController@batchUpdate')
1083
        ->name('application-reviews.batch-update');
1084
    Route::get('applications/{application}/experience', 'Api\ExperienceController@indexForApplication')
1085
        ->where('application', '[0-9]+')
1086
        ->middleware('can:view,application')
1087
        ->name('application.experience.index');
1088
    Route::put(
1089
        'applications/{application}/job-application-steps/{jobApplicationStep}',
1090
        'Api\ApplicationController@touchStep'
1091
    )
1092
        ->middleware('can:view,application')
1093
        ->name('job-application-step.update');
1094
});
1095