Files
portal-api/app/Console/Commands/Domain/SyncDomainsCommand.php
2026-09-09 16:56:22 +07:00

95 lines
3.7 KiB
PHP

<?php
namespace App\Console\Commands\Domain;
use App\Integrations\Domain\Extractors\DnsDomainExtractor;
use App\Integrations\Domain\Extractors\DnsDomainUserExtractor;
use App\Integrations\Domain\Extractors\DnsRecordExtractor;
use App\Integrations\Domain\Extractors\DnsServerExtractor;
use App\Integrations\Domain\Transformers\DnsDomainTransformer;
use App\Integrations\Domain\Transformers\DnsDomainUserTransformer;
use App\Integrations\Domain\Transformers\DnsRecordTransformer;
use App\Integrations\Domain\Transformers\DnsServerTransformer;
use App\Integrations\Domain\Writers\DnsDomainUserWriter;
use App\Integrations\Domain\Writers\DnsDomainWriter;
use App\Integrations\Domain\Writers\DnsRecordWriter;
use App\Integrations\Domain\Writers\DnsServerWriter;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
class SyncDomainsCommand extends Command
{
protected $signature = 'domain:sync';
protected $description = 'Extract DNS servers/domains/records/owners from the domain admin (tgs_domain_prod) database and upsert them locally';
public function handle(
DnsServerExtractor $serverExtractor,
DnsServerTransformer $serverTransformer,
DnsServerWriter $serverWriter,
DnsDomainExtractor $domainExtractor,
DnsDomainTransformer $domainTransformer,
DnsDomainWriter $domainWriter,
DnsRecordExtractor $recordExtractor,
DnsRecordTransformer $recordTransformer,
DnsRecordWriter $recordWriter,
DnsDomainUserExtractor $domainUserExtractor,
DnsDomainUserTransformer $domainUserTransformer,
DnsDomainUserWriter $domainUserWriter,
): int {
// Order matters: servers before domains (FK), domains before records/owners (FK).
$this->info('Syncing servers...');
$bar = $this->output->createProgressBar(DB::connection('domain')->table('dns_manager_servers')->count());
$bar->start();
foreach ($serverExtractor->extract() as $row) {
$serverWriter->write($serverTransformer->transform($row));
$bar->advance();
}
$bar->finish();
$this->newLine();
$this->info('Syncing domains...');
$bar = $this->output->createProgressBar(DB::connection('domain')->table('dns_manager_domain')->count());
$bar->start();
$skippedDomains = 0;
foreach ($domainExtractor->extract() as $row) {
if (! $domainWriter->write($domainTransformer->transform($row))) {
$skippedDomains++;
}
$bar->advance();
}
$bar->finish();
$this->newLine();
$this->info('Syncing records...');
$bar = $this->output->createProgressBar(DB::connection('domain')->table('dns_manager_ns')->count());
$bar->start();
$skippedRecords = 0;
foreach ($recordExtractor->extract() as $row) {
if (! $recordWriter->write($recordTransformer->transform($row))) {
$skippedRecords++;
}
$bar->advance();
}
$bar->finish();
$this->newLine();
$this->info('Syncing domain owners...');
$bar = $this->output->createProgressBar(DB::connection('domain')->table('dns_domain_user')->count());
$bar->start();
$skippedOwners = 0;
foreach ($domainUserExtractor->extract() as $row) {
if (! $domainUserWriter->write($domainUserTransformer->transform($row))) {
$skippedOwners++;
}
$bar->advance();
}
$bar->finish();
$this->newLine();
$this->info("Skipped: {$skippedDomains} domain(s), {$skippedRecords} record(s), {$skippedOwners} owner link(s) (unresolved FK).");
return Command::SUCCESS;
}
}