RecruitmentsController   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 27
c 1
b 0
f 0
dl 0
loc 73
rs 10
wmc 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A reopen() 0 5 1
A update() 0 5 1
A duplicate() 0 5 1
A list() 0 14 2
A create() 0 10 2
A __construct() 0 3 1
A close() 0 5 1
A get() 0 3 1
1
<?php
2
3
namespace App\Http\Controllers;
4
5
use App\Http\Requests\RecruitmentCloseRequest;
6
use App\Http\Requests\RecruitmentCreateRequest;
7
use App\Http\Requests\RecruitmentUpdateRequest;
8
use App\Http\Resources\RecruitmentResource;
9
use App\Models\Recruitment;
10
use App\Services\TenantManager;
11
use App\Utils\Recruitments\RecruitmentCreator;
12
use App\Utils\Recruitments\RecruitmentReplicator;
13
use Illuminate\Support\Facades\Auth;
14
15
class RecruitmentsController extends Controller
16
{
17
    /**
18
     * Create a new controller instance.
19
     *
20
     * @param TenantManager $tenantManager
21
     *
22
     * @return void
23
     */
24
    public function __construct(TenantManager $tenantManager)
25
    {
26
        RecruitmentResource::setTenantManager($tenantManager); //workaround - not the best but it works well
27
    }
28
29
    public function create(RecruitmentCreateRequest $request)
30
    {
31
        $user = Auth::user();
32
        if ($user->can('create recruitments')) {
33
            $recruitment = RecruitmentCreator::create($request->validated());
34
35
            return response()->json($recruitment);
36
        }
37
38
        return response('Unauthorized', 401);
39
    }
40
41
    public function list()
42
    {
43
        $user = Auth::user();
44
        if ($user->can('read all recruitments')) {
45
            $recruitments = Recruitment::where('is_draft', false)->with('sources')->withCount(['candidates as new_candidates_count' => function ($query) {
46
                $query->whereNull('seen_at');
47
            }])->orderByDesc('created_at')->get();
48
        } else {
49
            $recruitments = $user->grantedRecruitments()->where('is_draft', false)->with('sources')->withCount(['candidates as new_candidates_count' => function ($query) {
50
                $query->whereNull('seen_at');
51
            }])->orderByDesc('created_at')->get();
52
        }
53
54
        return RecruitmentResource::collection($recruitments);
55
    }
56
57
    public function get(Recruitment $recruitment)
58
    {
59
        return response()->json($recruitment->load('stages'));
60
    }
61
62
    public function update(RecruitmentUpdateRequest $request, Recruitment $recruitment)
63
    {
64
        $recruitment = RecruitmentCreator::updateRecruitment($recruitment->id, $request);
65
66
        return response()->json($recruitment, 200);
67
    }
68
69
    public function close(RecruitmentCloseRequest $request, Recruitment $recruitment)
70
    {
71
        $recruitment = RecruitmentCreator::close($recruitment->id, $request);
72
73
        return response()->json($recruitment, 200);
74
    }
75
76
    public function reopen(Recruitment $recruitment)
77
    {
78
        $recruitment = RecruitmentCreator::reopen($recruitment->id);
79
80
        return response()->json($recruitment, 200);
81
    }
82
83
    public function duplicate(Recruitment $recruitment)
84
    {
85
        $recruitment = RecruitmentReplicator::duplicate($recruitment->id);
86
87
        return response()->json($recruitment, 200);
88
    }
89
}
90