File manager - Edit - /var/www/html/homologBancodetalentos/app/Support/TalentBank/CandidateJobCompatibility.php
Back
<?php namespace App\Support\TalentBank; use App\Models\TalentBank\Candidate; use App\Models\TalentBank\Scopes\ForWantedOccupationsScope; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; /** * Centraliza toda a lógica de compatibilidade entre candidato e vagas por área de interesse. * Comparação sempre por ID, nunca por nome, preparado para múltiplas áreas. */ class CandidateJobCompatibility { /** * Retorna os IDs das ocupações que o candidato declarou como área de interesse. * * @return Collection<int, int> */ public static function wantedOccupationIds(Candidate $candidate): Collection { return $candidate->wantedOccupations() ->pluck('occupations.id') ->map(fn ($id) => (int) $id); } /** * Indica se o candidato possui áreas de interesse cadastradas. */ public static function hasWantedOccupations(Candidate $candidate): bool { return self::wantedOccupationIds($candidate)->isNotEmpty(); } /** * Aplica o scope de filtragem por áreas de interesse na query de vagas. * Retorna a query sem modificação se o candidato não tiver áreas definidas. */ public static function applyToQuery(Builder $query, Candidate $candidate): Builder { $ids = self::wantedOccupationIds($candidate); if ($ids->isEmpty()) { return $query; } $scope = new ForWantedOccupationsScope($ids); $scope->apply($query, $query->getModel()); return $query; } /** * Nomes das áreas de interesse do candidato para exibição no banner. * * @return Collection<int, string> */ public static function wantedOccupationNames(Candidate $candidate): Collection { return $candidate->wantedOccupations()->pluck('occupations.name'); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings