Files
Investidor-V2/tools/verify-skills-education.php
nala 3dc7c5c649
tests / ci (push) Canceled after 0s
commit 30/9
2026-09-30 09:05:43 +02:00

38 lines
2.1 KiB
PHP

<?php
use Illuminate\Contracts\Console\Kernel;
use Illuminate\Support\Facades\DB;
require __DIR__.'/../vendor/autoload.php';
$app = require __DIR__.'/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
$db = DB::connection();
$baseline = isset($argv[1]) ? json_decode(file_get_contents($argv[1]), true, 512, JSON_THROW_ON_ERROR) : null;
$report = $db->transaction(function () use ($db, $baseline): array {
$db->statement('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ ONLY');
$counts = [];
foreach ($db->select("SELECT tablename FROM pg_tables WHERE schemaname='skills_edu' ORDER BY tablename") as $table) {
$counts[$table->tablename] = $db->table('skills_edu.'.$table->tablename)->count();
}
$differences = [];
foreach ($baseline['row_counts'] ?? [] as $table => $before) {
$expected = $before + ($table === 'public.migrations' ? 6 : 0);
$actual = $db->table($table)->count();
if ($actual !== $expected) {
$differences[$table] = ['expected' => $expected, 'actual' => $actual];
}
}
return ['server' => $db->selectOne('SHOW server_version')->server_version,
'baseline_tables_checked' => count($baseline['row_counts'] ?? []), 'baseline_differences' => $differences,
'tables' => $counts, 'table_count' => count($counts),
'foreign_keys' => (int) $db->selectOne("SELECT count(*) AS n FROM pg_constraint c JOIN pg_namespace ns ON ns.oid=c.connamespace WHERE ns.nspname='skills_edu' AND c.contype='f'")->n,
'indexes' => $db->table('pg_indexes')->where('schemaname', 'skills_edu')->count(),
'registered_migrations' => $db->table('migrations')->where('migration', 'like', '2026_09_30_%_skills_education_%')->count(),
'sql_sha256' => array_combine(array_map('basename', glob(database_path('sql/skills-education/*.sql'))), array_map(fn ($file) => hash_file('sha256', $file), glob(database_path('sql/skills-education/*.sql')))),
];
});
echo json_encode($report, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR).PHP_EOL;
exit($report['table_count'] === 24 && $report['registered_migrations'] === 6 && $report['baseline_differences'] === [] ? 0 : 1);