Files
Investidor-V2/tools/existing-business-reconcile.php
T

36 lines
1.5 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();
if (! $app->environment('local') || DB::connection()->getDriverName() !== 'pgsql') {
throw new RuntimeException('Local PostgreSQL only.');
}
$manifest = $argv[1] ?? '';
if (! is_file($manifest)) {
throw new RuntimeException('Provide the private backup manifest path.');
}
$before = json_decode(file_get_contents($manifest), true, 512, JSON_THROW_ON_ERROR)['row_counts'];
$result = DB::transaction(function () use ($before): array {
DB::statement('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ ONLY');
$changes = [];
foreach ($before as $table => $count) {
$after = DB::table($table)->count();
if ($after !== $count) {
$changes[$table] = ['before' => $count, 'after' => $after];
}
}
$new = [];
foreach (['existing_businesses', 'existing_business_objects', 'existing_business_mandates', 'existing_business_revisions', 'existing_business_reviews'] as $table) {
$new[$table] = DB::table($table)->count();
}
return ['previous_tables' => count($before), 'changes' => $changes, 'new_tables' => $new,
'private_module_enabled' => (bool) config('existing-business.enabled'),
'designated_reviewer_count' => count(config('existing-business.reviewers', []))];
});
echo json_encode($result, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR).PHP_EOL;