Files
Investidor-V2/tools/territorial-repair-qa-seed.php
nala 1106509116
tests / ci (push) Canceled after 0s
vrsao 2
2026-10-08 14:02:01 +02:00

52 lines
2.9 KiB
PHP

<?php
use Illuminate\Contracts\Console\Kernel;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
// Synthetic preview only, fixed isolated restored QA database; never writes active data.
foreach (['APP_ENV' => 'testing', 'DB_CONNECTION' => 'pgsql', 'DB_HOST' => '127.0.0.1', 'DB_PORT' => '55441',
'DB_DATABASE' => 'anchor_restore_20261007_test', 'DB_USERNAME' => 'postgres', 'DB_PASSWORD' => '', 'DB_URL' => ''] as $key => $value) {
putenv($key.'='.$value);
$_ENV[$key] = $_SERVER[$key] = $value;
}
require dirname(__DIR__).'/vendor/autoload.php';
$app = require dirname(__DIR__).'/bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
$identity = DB::selectOne('select current_database() as database, inet_server_port() as port');
if ($identity->database !== 'anchor_restore_20261007_test' || (int) $identity->port !== 55441) {
throw new RuntimeException('Isolated QA required');
}
$root = storage_path('app/private/anchor-project-reconciliation');
$fixture = json_decode(file_get_contents($root.'/qa-browser-fixture.json'), true, 512, JSON_THROW_ON_ERROR);
$dossier = DB::table('investment_dossiers')->where('id', $fixture['project_dossier'])->first();
$project = DB::table('projects')->where('id', $dossier->project_id)->first();
if (! str_starts_with($project->code, 'QA-')) {
throw new RuntimeException('Synthetic project required');
}
$site = DB::table('project_locations')->where('project_id', $project->id)->where('role', 'primary')->first();
$nodes = [];
$id = $site->geo_location_id;
while ($id) {
$node = DB::table('geo_locations')->where('id', $id)->first();
$nodes[$node->location_type] = $node;
$id = $node->parent_id;
}
$base = ['project_id' => $project->id, 'code' => $project->code, 'dossier_id' => $dossier->id, 'dossier_version' => $dossier->version_no,
'source_reference' => $dossier->source, 'source_quote' => json_decode($dossier->content, true)['location'],
'reason' => 'Synthetic QA individual territorial validation', 'expected_project_version' => $project->version_no, 'data_classification' => 'public'];
$rows = [];
foreach ([['province', 'secondary'], ['district', 'impact'], ['admin_post', 'secondary'], ['locality', 'impact']] as [$type, $role]) {
$rows[] = [...$base, 'geo_location_id' => $nodes[$type]->id, 'name' => $nodes[$type]->name, 'role' => $role, 'existing' => false];
}
$rows[2]['source_quote'] = '';
$rows[3]['province_id'] = (string) Str::uuid();
$directory = $root.'/qa-territorial-preview';
if (! is_dir($directory)) {
mkdir($directory, 0700, true);
}
file_put_contents($directory.'/preview.json', json_encode(['target' => ['database' => $identity->database, 'port' => (int) $identity->port],
'locations' => $rows, 'memberships' => [], 'prepared_opportunities' => [], 'pending' => []], JSON_THROW_ON_ERROR));
copy($root.'/qa-preview/backup-proof.json', $directory.'/backup-proof.json');
echo "Synthetic isolated QA territorial preview prepared.\n";