File manager - Edit - /var/www/html/homologBancodetalentos/app/Http/Controllers/TalentBank/CandidateController.php
Back
<?php namespace App\Http\Controllers\TalentBank; use App\Http\Controllers\Controller; use App\Http\Requests\LoginRequest; use App\Http\Requests\TalentBank\CandidateRequest; use App\Http\Resources\TalentBank\CandidateResource; use App\Http\Resources\TalentBank\CandidateSessionResource; use App\Http\Services\AuthService; use App\Http\Services\TalentBank\CandidateService; use App\Http\Services\UserService; use App\Models\TalentBank\Candidate; use App\Support\TalentBank\IntegrationLog; use App\Support\TalentBank\Observability; use Exception; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Validator; class CandidateController extends Controller { private CandidateService $candidateService; private AuthService $authService; private UserService $userService; public function __construct() { $this->candidateService = new CandidateService(); $this->authService = new AuthService(); $this->userService = new UserService(); $this->middleware('auth.permissions:talent-bank-user-candidate,gestao-de-usuarios,talent-bank-admin') ->only(['update', 'session', 'attachLanguage', 'detachLanguage', 'selfEdit']); $this->middleware('auth.permissions:talent-bank-user-candidate,talent-bank-user-company,gestao-de-usuarios,talent-bank-admin')->only(['show']); $this->middleware('auth.permissions:gestao-de-usuarios,talent-bank-admin')->only(['store', 'destroy', 'index', 'report']); } public function index(Request $request) { try { $response = $this->candidateService->index($request); return response()->json([ 'data' => $response, 'message' => __('validation.success'), ], JsonResponse::HTTP_OK); } catch (Exception $e) { return response()->json( ['message' => $e->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } } public function show(Request $request, Candidate $candidate) { $candidate->load([ 'applications.company', 'applications.occupation', 'applications.salaryRange', 'applications.contractType', 'applications.neighbourhood', 'applications.expertiseLevel', 'applications.modality', 'applications.workload', ]); $response = $this->candidateService->show($candidate); $authRequest = new Request(); $authRequest->query->add([ 'without_paginate' => '', 'document' => $response->cpf, ]); $authResponse = $this->userService->publicInfo($authRequest); if ($authResponse->status() == JsonResponse::HTTP_OK) { $data = $authResponse->json(); $request->merge(['photo' => $data['data']['users'][0]['picture'] ?? null]); } return response()->json([ 'data' => ['candidate' => new CandidateResource($response)], 'message' => __('validation.success'), ], JsonResponse::HTTP_OK); } public function store(CandidateRequest $request) { try { DB::beginTransaction(); $response = $this->candidateService->store($request); DB::commit(); return response()->json([ 'message' => __('crud.message.insert', ['model' => __('crud.model.talent_bank.candidate')]), 'candidate' => new CandidateResource($response), ], JsonResponse::HTTP_OK); } catch (Exception $e) { DB::rollBack(); return response()->json( ['message' => $e->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } } public function update(CandidateRequest $request, int $candidate) { try { DB::beginTransaction(); $data = $request->all(); unset($data['cpf'], $data['email']); $candidateModel = $request->talentBankUser; $response = $this->candidateService->update($data, $candidateModel); DB::commit(); return response()->json([ 'message' => __('crud.message.update', ['model' => __('crud.model.talent_bank.candidate')]), 'candidate' => new CandidateResource($response), ], JsonResponse::HTTP_OK); } catch (Exception $e) { DB::rollBack(); return response()->json( ['message' => $e->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } } public function destroy(Candidate $candidate) { try { DB::beginTransaction(); $this->candidateService->destroy($candidate); DB::commit(); return response()->json([ 'message' => __('crud.message.delete', ['model' => __('crud.model.talent_bank.candidate')]), ], JsonResponse::HTTP_OK); } catch (Exception $e) { DB::rollBack(); return response()->json( ['message' => $e->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } } public function session(Request $request) { return response()->json([ 'data' => ['candidate' => new CandidateSessionResource($request->talentBankUser)], 'message' => __('validation.success'), ], JsonResponse::HTTP_OK); } public function attachLanguage(Request $request) { $candidate = $request->talentBankUser; $validator = Validator::make($request->all(), [ 'language_id' => 'required|integer|exists:languages,id', 'language_proficiency_id' => 'required|integer|exists:language_proficiencies,id', ]); if ($validator->fails()) { return response()->json( [ 'message' => __('validation.validation_error'), 'data' => $validator->errors(), ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY ); } try { DB::beginTransaction(); $response = $this->candidateService->attachLanguage($request, $candidate); DB::commit(); return response()->json([ 'data' => ['candidate' => new CandidateResource($response)], 'message' => __('validation.success'), ], JsonResponse::HTTP_OK); } catch (Exception $e) { DB::rollBack(); return response()->json( ['message' => $e->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } } public function detachLanguage(Request $request, int $languageId) { $candidate = $request->talentBankUser; try { DB::beginTransaction(); $response = $this->candidateService->detachLanguage($candidate, $languageId); DB::commit(); return response()->json([ 'data' => ['candidate' => new CandidateResource($response)], 'message' => __('validation.success'), ], JsonResponse::HTTP_OK); } catch (Exception $e) { DB::rollBack(); return response()->json( ['message' => $e->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } } public function register(Request $request) { try { DB::beginTransaction(); $arrData = [ 'permissions' => ['talent-bank-user-candidate'], 'user_type_id' => 2, 'first_access' => 0, ]; $request->merge($arrData); $response = $this->authService->register($request); if (! $response->successful()) { $isValidation = $response->status() === JsonResponse::HTTP_UNPROCESSABLE_ENTITY; Observability::event('candidate.register.failed', [ 'document' => (string) $request->input('document', ''), 'http_status' => $response->status(), 'error' => data_get($response->json(), 'message', $isValidation ? 'validation_error' : 'upstream_error'), ], $isValidation ? 'warning' : 'error'); DB::rollBack(); return response($response->json(), $response->status()); } $data = $request->all(); $request->merge(['cpf' => $data['document']]); $response = $this->candidateService->store($request); DB::commit(); Observability::event('candidate.register.success', [ 'document' => (string) $data['document'], 'email' => (string) ($data['email'] ?? ''), ]); return response()->json([ 'message' => __('crud.message.insert', ['model' => __('crud.model.talent_bank.candidate')]), 'candidate' => new CandidateResource($response), ], JsonResponse::HTTP_OK); } catch (Exception $e) { DB::rollBack(); Observability::event('candidate.register.failed', [ 'document' => (string) $request->input('document', ''), 'error' => $e->getMessage(), ], 'error'); return response()->json( ['message' => $e->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } } public function login(LoginRequest $request) { try { $response = $this->authService->login($request); if ($response->status() == JsonResponse::HTTP_UNAUTHORIZED) { Observability::event('candidate.login.failed', [ 'document' => (string) $request->input('document', ''), 'http_status' => $response->status(), 'error' => data_get($response->json(), 'message', 'unauthorized'), ], 'warning'); return response($response->json(), $response->status()); } $data = $request->all(); $candidate = $this->candidateService->getByCustom([ ['column' => 'cpf', 'value' => $data['document']], ]); if ($candidate->count() == 0) { $payload = $response->json(); $request->headers->set('authorization', $payload['token_type'].' '.$payload['access_token']); $request->merge(['permissions' => ['talent-bank-user-candidate']]); try { $this->userService->selfAssignPermission($request); } catch (\Throwable $e) { // Falha não bloqueia o login: usuário já está autenticado. // A permissão pode ser atribuída em acesso subsequente. IntegrationLog::warning('talent_bank.user_service', 'self_assign_permission_failed', [ 'document' => (string) $request->input('document', ''), 'error' => $e->getMessage(), ]); } $sessionResponse = $this->authService->session($request); $session = $sessionResponse->json(); $request->merge([ 'cpf' => $session['data']['document'], 'name' => $session['data']['name'], 'email' => $session['data']['email'], ]); $this->candidateService->store($request); } return response($response->json(), $response->status()); } catch (Exception $e) { DB::rollBack(); Observability::event('candidate.login.failed', [ 'document' => (string) $request->input('document', ''), 'error' => $e->getMessage(), ], 'error'); return response()->json( ['message' => $e->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } } public function selfEdit(Request $request) { try { $request->merge(['_method' => 'PUT']); $response = $this->userService->selfEdit($request); if ($response->status() == JsonResponse::HTTP_OK) { $userData = $response->json()['data']['user']; $data = [ 'document' => $userData['document'], 'name' => $userData['name'], 'email' => $userData['email'], ]; $candidate = $this->candidateService->getByCustom([ ['column' => 'cpf', 'value' => $data['document']], ])->first(); DB::beginTransaction(); $response = $this->candidateService->update($data, $candidate); DB::commit(); Observability::event('candidate.self_edit.success', [ 'document' => (string) $userData['document'], ]); return response()->json([ 'message' => __('crud.message.update', ['model' => __('crud.model.talent_bank.candidate')]), 'candidate' => new CandidateResource($response), ], JsonResponse::HTTP_OK); } Observability::event('candidate.self_edit.failed', [ 'document' => (string) $request->input('document', ''), 'http_status' => $response->status(), 'error' => data_get($response->json(), 'message', 'upstream_error'), ], 'warning'); return response()->json($response->json(), $response->status()); } catch (Exception $e) { DB::rollBack(); Observability::event('candidate.self_edit.failed', [ 'document' => (string) $request->input('document', ''), 'error' => $e->getMessage(), ], 'error'); return response()->json( ['message' => $e->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } } public function report(Request $request) { try { $paginate = $request->has('paginate') ? filter_var($request['paginate'], FILTER_VALIDATE_BOOLEAN) : true; if (! $paginate) { $response = $this->candidateService->report($request); } else { $response = $this->candidateService->reportPaginated($request); } return response()->json([ 'data' => $response, 'message' => __('validation.success'), ], JsonResponse::HTTP_OK); } catch (Exception $e) { return response()->json( ['message' => $e->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } } public function contact(Request $request) { try { $validator = Validator::make($request->all(), [ 'email' => 'required|email', 'name' => 'required', 'phone' => 'required', 'subject' => 'required', 'message' => 'required', ]); if ($validator->fails()) { return response()->json( [ 'message' => __('validation.validation_error'), 'data' => $validator->errors(), ], JsonResponse::HTTP_UNPROCESSABLE_ENTITY ); } $this->candidateService->contact($request); Observability::event('candidate.contact.success', [ 'email' => (string) $request->input('email', ''), 'subject' => (string) $request->input('subject', ''), ]); return response()->json([ 'data' => 'Mail sent', 'message' => __('validation.success'), ], JsonResponse::HTTP_OK); } catch (Exception $e) { Observability::event('candidate.contact.failed', [ 'email' => (string) $request->input('email', ''), 'error' => $e->getMessage(), ], 'error'); return response()->json( ['message' => $e->getMessage()], JsonResponse::HTTP_INTERNAL_SERVER_ERROR ); } } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings