Retomar a oportunidade escolhida apos a entrada do candidato

This commit is contained in:
2026-10-30 21:18:53 +02:00
parent c22846b2b1
commit f5f5649cfc
8 changed files with 136 additions and 2 deletions
@@ -16,6 +16,7 @@ use App\Services\CurrentActor;
use App\Services\OrganizationConfiguration;
use App\Services\RequisitionWorkflow;
use App\Services\SubmissionForms;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
@@ -24,6 +25,7 @@ use Illuminate\Support\Facades\Schema;
use Illuminate\Validation\ValidationException;
use Inertia\Inertia;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class CandidatePortalController extends Controller
{
@@ -69,7 +71,8 @@ class CandidatePortalController extends Controller
public function login(Request $request, int $company, CandidateProfiles $profiles): Response
{
abort_unless($profiles->portal($company) !== null, 404);
$data = $request->validate(['email' => 'required|string|max:254', 'password' => 'required|string|max:128']);
$data = $request->validate(['email' => 'required|string|max:254', 'password' => 'required|string|max:128',
'opportunity_id' => 'nullable|integer|min:1|max:2147483647']);
$account = CandidateAccount::query()->where('tenant_id', $company)->where('email', mb_strtolower(trim($data['email'])))->first();
$dummy = Hash::make('candidate-unavailable-account');
$valid = Hash::check($data['password'], $account->password ?? $dummy);
@@ -82,6 +85,18 @@ class CandidatePortalController extends Controller
$request->session()->regenerate();
Inertia::clearHistory();
if (isset($data['opportunity_id'])) {
try {
// Recheck current publication, company and deadline after authentication.
app(CandidateSubmissions::class)->opportunity($company, (int) $data['opportunity_id']);
return redirect('/candidaturas/'.$company.'/oportunidades/'.$data['opportunity_id']);
} catch (NotFoundHttpException|ModelNotFoundException) {
// A withdrawn, expired or foreign opportunity cannot become an authenticated destination.
return redirect('/candidaturas/'.$company.'/perfil')->with('candidate_access_status', 'opportunity_unavailable');
}
}
return redirect('/candidaturas/'.$company.'/perfil');
}