akubiczek /
applicake-backend
| 1 | <?php |
||||||
| 2 | |||||||
| 3 | namespace App\Http\Controllers; |
||||||
| 4 | |||||||
| 5 | use App\Http\Requests\CandidateDeleteRequest; |
||||||
| 6 | use App\Http\Requests\CandidatesCreateRequest; |
||||||
| 7 | use App\Http\Requests\CandidatesListRequest; |
||||||
| 8 | use App\Http\Requests\CandidateUpdateRequest; |
||||||
| 9 | use App\Http\Requests\ChangeStageRequest; |
||||||
| 10 | use App\Http\Resources\CandidateResource; |
||||||
| 11 | use App\Http\Resources\TruncatedCandidateResource; |
||||||
| 12 | use App\Models\Candidate; |
||||||
| 13 | use App\Repositories\CandidatesRepository; |
||||||
| 14 | use App\Services\TenantManager; |
||||||
| 15 | use App\Utils\Candidates\CandidateCreator; |
||||||
| 16 | use App\Utils\Candidates\CandidateDeleter; |
||||||
| 17 | use App\Utils\Candidates\CandidateUpdater; |
||||||
| 18 | use App\Utils\Candidates\StageChanger; |
||||||
| 19 | use Illuminate\Http\Request; |
||||||
| 20 | use Illuminate\Support\Facades\Auth; |
||||||
| 21 | use Illuminate\Support\Facades\Storage; |
||||||
| 22 | |||||||
| 23 | class CandidatesController extends Controller |
||||||
| 24 | { |
||||||
| 25 | /** |
||||||
| 26 | * @var TenantManager |
||||||
| 27 | */ |
||||||
| 28 | protected $tenantManager; |
||||||
| 29 | |||||||
| 30 | /** |
||||||
| 31 | * Create a new controller instance. |
||||||
| 32 | * |
||||||
| 33 | * @param TenantManager $tenantManager |
||||||
| 34 | * |
||||||
| 35 | * @return void |
||||||
| 36 | */ |
||||||
| 37 | public function __construct(TenantManager $tenantManager) |
||||||
| 38 | { |
||||||
| 39 | $this->tenantManager = $tenantManager; |
||||||
| 40 | } |
||||||
| 41 | |||||||
| 42 | public function create(CandidatesCreateRequest $request) |
||||||
| 43 | { |
||||||
| 44 | $candidate = CandidateCreator::createCandidate($request, $this->tenantManager); |
||||||
| 45 | |||||||
| 46 | return response()->json($candidate, 201); |
||||||
| 47 | } |
||||||
| 48 | |||||||
| 49 | public function list(CandidatesListRequest $request) |
||||||
| 50 | { |
||||||
| 51 | $recruitmentId = $request->get('recruitmentId'); |
||||||
|
0 ignored issues
–
show
|
|||||||
| 52 | $user = Auth::user(); |
||||||
| 53 | |||||||
| 54 | if ($request->get('search')) { |
||||||
| 55 | $candidates = CandidatesRepository::search($request->validated()); |
||||||
| 56 | } elseif ($recruitmentId) { |
||||||
| 57 | $candidates = Candidate::where('recruitment_id', $recruitmentId)->with('recruitment')->orderBy('created_at', 'DESC')->get(); |
||||||
| 58 | } else { |
||||||
| 59 | $candidates = Candidate::with('recruitment')->orderBy('created_at', 'DESC')->get(); |
||||||
| 60 | } |
||||||
| 61 | |||||||
| 62 | if (!$user->can('read all recruitments')) { |
||||||
| 63 | $filtered = $candidates->filter( |
||||||
| 64 | function ($candidate, $key) use ($user) { |
||||||
|
0 ignored issues
–
show
The parameter
$key is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body. Loading history...
|
|||||||
| 65 | return $user->can('view', $candidate); |
||||||
| 66 | } |
||||||
| 67 | ); |
||||||
| 68 | |||||||
| 69 | $candidates = $filtered; |
||||||
| 70 | } |
||||||
| 71 | |||||||
| 72 | return TruncatedCandidateResource::collection($candidates); |
||||||
| 73 | } |
||||||
| 74 | |||||||
| 75 | // DEPRECATED |
||||||
| 76 | // public function names(Request $request) |
||||||
| 77 | // { |
||||||
| 78 | // $search = $request->get('search'); |
||||||
| 79 | // $columns = ['id', 'name']; |
||||||
| 80 | // |
||||||
| 81 | // if ($search) { |
||||||
| 82 | // $candidates = CandidatesRepository::search(['search' => $search], $columns); |
||||||
| 83 | // } else { |
||||||
| 84 | // $candidates = Candidate::select($columns)->get(); |
||||||
| 85 | // } |
||||||
| 86 | // return response()->json($candidates); |
||||||
| 87 | // } |
||||||
| 88 | |||||||
| 89 | public function get(Candidate $candidate) |
||||||
| 90 | { |
||||||
| 91 | return new CandidateResource($candidate); |
||||||
| 92 | } |
||||||
| 93 | |||||||
| 94 | public function update(CandidateUpdateRequest $request, Candidate $candidate) |
||||||
| 95 | { |
||||||
| 96 | $candidate = CandidateUpdater::updateCandidate($candidate->id, $request); |
||||||
| 97 | |||||||
| 98 | return response()->json($candidate, 200, ['Location' => '/candidates/'.$candidate->id]); |
||||||
| 99 | } |
||||||
| 100 | |||||||
| 101 | public function delete(CandidateDeleteRequest $request, Candidate $candidate) |
||||||
| 102 | { |
||||||
| 103 | CandidateDeleter::deleteCandidate($request, $candidate->id); |
||||||
| 104 | |||||||
| 105 | return response()->json(null, 200); |
||||||
| 106 | } |
||||||
| 107 | |||||||
| 108 | public function hasBeenSeen(Candidate $candidate) |
||||||
| 109 | { |
||||||
| 110 | if (!$candidate->seen_at) { |
||||||
| 111 | $candidate->seen_at = new \DateTime(); |
||||||
| 112 | $candidate->save(); |
||||||
| 113 | } |
||||||
| 114 | |||||||
| 115 | return response()->json($candidate, 200, ['Location' => '/candidates/'.$candidate->id]); |
||||||
| 116 | } |
||||||
| 117 | |||||||
| 118 | //TODO: route nie chroniony - docelowo zrobić zabezpieczenie z użyciem jednorazowych tokenów, a także nie przekazywać do klienta pola path_to_cv |
||||||
| 119 | public function cv(Request $request, $candidateId) |
||||||
| 120 | { |
||||||
| 121 | $download = $request->get('download'); |
||||||
|
0 ignored issues
–
show
The method
get() does not exist on Illuminate\Http\Request.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. Loading history...
|
|||||||
| 122 | $candidate = Candidate::find($candidateId); |
||||||
| 123 | |||||||
| 124 | if (!Storage::disk('s3')->exists($candidate->path_to_cv)) { |
||||||
|
0 ignored issues
–
show
It seems like
$candidate->path_to_cv can also be of type Illuminate\Database\Eloq...uent\Relations\Relation and Illuminate\Database\Eloquent\Relations\Relation and Illuminate\Support\HigherOrderCollectionProxy; however, parameter $path of Illuminate\Filesystem\FilesystemAdapter::exists() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 125 | return response('File not found', 404); |
||||||
| 126 | } |
||||||
| 127 | |||||||
| 128 | $fileName = str_replace(' ', '_', $candidate->name).'-CV.pdf'; //TODO sanitize |
||||||
| 129 | |||||||
| 130 | if ($download) { |
||||||
| 131 | return Storage::disk('s3')->download($candidate->path_to_cv, $fileName); |
||||||
|
0 ignored issues
–
show
It seems like
$candidate->path_to_cv can also be of type Illuminate\Database\Eloq...uent\Relations\Relation and Illuminate\Database\Eloquent\Relations\Relation and Illuminate\Support\HigherOrderCollectionProxy; however, parameter $path of Illuminate\Filesystem\Fi...stemAdapter::download() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 132 | } else { |
||||||
| 133 | return Storage::disk('s3')->response($candidate->path_to_cv, $fileName); |
||||||
|
0 ignored issues
–
show
It seems like
$candidate->path_to_cv can also be of type Illuminate\Database\Eloq...uent\Relations\Relation and Illuminate\Database\Eloquent\Relations\Relation and Illuminate\Support\HigherOrderCollectionProxy; however, parameter $path of Illuminate\Filesystem\Fi...stemAdapter::response() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 134 | } |
||||||
| 135 | } |
||||||
| 136 | |||||||
| 137 | public function changeStage(ChangeStageRequest $request) |
||||||
| 138 | { |
||||||
| 139 | $candidate = StageChanger::changeStage($request); |
||||||
| 140 | |||||||
| 141 | return response()->json($candidate, 200, ['Location' => '/candidates/'.$candidate->id]); |
||||||
| 142 | } |
||||||
| 143 | } |
||||||
| 144 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.