File manager - Edit - /var/www/html/homologBancodetalentos/app/Console/Commands/TalentBankValidateMigrationCommand.php
Back
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; class TalentBankValidateMigrationCommand extends Command { protected $signature = 'talent-bank:validate-migration {--target-connection= : Conexão alvo (padrão: config talent_bank_legacy_import.target_connection)}'; protected $description = 'Valida contagens e integridade básica após migrate/legacy-migrate (sem alterar dados).'; public function handle(): int { $con = (string) ($this->option('target-connection') ?: config('talent_bank_legacy_import.target_connection', config('database.default'))); $this->info("Conexão: {$con}"); $this->newLine(); $failures = []; $counts = $this->tableCounts($con); $this->table(['Tabela', 'Registros'], collect($counts)->map(fn ($n, $t) => [$t, $n])->values()->all()); if (($counts['candidates'] ?? 0) < 1) { $failures[] = 'candidates vazio — rode talent-bank:legacy-migrate'; } if (($counts['companies'] ?? 0) < 1) { $failures[] = 'companies vazio — rode talent-bank:legacy-migrate'; } $checks = [ 'CPF duplicado' => $this->duplicateCount($con, 'candidates', 'cpf'), 'CNPJ duplicado' => $this->duplicateCount($con, 'companies', 'cnpj'), 'Vagas sem empresa' => $this->orphanJobListings($con), 'Candidaturas órfãs' => $this->orphanApplications($con), ]; $rows = []; foreach ($checks as $label => $count) { $rows[] = [$label, $count, $count === 0 ? 'OK' : 'FALHA']; if ($count > 0) { $failures[] = "{$label}: {$count}"; } } $this->newLine(); $this->table(['Verificação', 'Ocorrências', 'Status'], $rows); if ($failures !== []) { $this->newLine(); $this->error('Validação falhou:'); foreach ($failures as $msg) { $this->line(" • {$msg}"); } return self::FAILURE; } $this->newLine(); $this->info('Validação concluída com sucesso.'); return self::SUCCESS; } /** @return array<string, int> */ private function tableCounts(string $con): array { $tables = ['candidates', 'companies', 'job_listings', 'job_listing_candidate', 'ethnicities']; $out = []; foreach ($tables as $table) { $out[$table] = Schema::connection($con)->hasTable($table) ? (int) DB::connection($con)->table($table)->count() : 0; } return $out; } private function duplicateCount(string $con, string $table, string $column): int { if (! Schema::connection($con)->hasTable($table)) { return 0; } return (int) DB::connection($con) ->table($table) ->selectRaw("{$column}, COUNT(*) as total") ->groupBy($column) ->havingRaw('COUNT(*) > 1') ->get() ->count(); } private function orphanJobListings(string $con): int { if (! Schema::connection($con)->hasTable('job_listings')) { return 0; } return (int) DB::connection($con) ->table('job_listings as j') ->leftJoin('companies as c', 'c.id', '=', 'j.company_id') ->whereNull('c.id') ->count(); } private function orphanApplications(string $con): int { if (! Schema::connection($con)->hasTable('job_listing_candidate')) { return 0; } return (int) DB::connection($con) ->table('job_listing_candidate as jlc') ->leftJoin('job_listings as j', 'j.id', '=', 'jlc.job_listing_id') ->leftJoin('candidates as c', 'c.id', '=', 'jlc.candidate_id') ->where(function ($q) { $q->whereNull('j.id')->orWhereNull('c.id'); }) ->count(); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings