Files
portal-api/app/Console/Commands/Whmcs/SyncClientsCommand.php
T

40 lines
1.3 KiB
PHP

<?php
namespace App\Console\Commands\Whmcs;
use App\Integrations\Whmcs\Extractors\ClientExtractor;
use App\Jobs\Whmcs\SyncClientJob;
use App\Integrations\Whmcs\Support\SyncReport;
use Illuminate\Console\Command;
class SyncClientsCommand extends Command
{
protected $signature = 'whmcs:sync-clients {--sync : Run each record inline instead of queueing it} {--missing-only : Only records not yet synced (new, or order without customer)}';
protected $description = 'Extract clients from the WHMCS database and upsert them into customers';
public function handle(ClientExtractor $extractor): int
{
$sync = (bool) $this->option('sync');
$missingOnly = (bool) $this->option('missing-only');
$total = $extractor->extract($missingOnly)->count();
$bar = $this->output->createProgressBar($total);
$bar->start();
foreach ($extractor->extract($missingOnly) as $row) {
$job = new SyncClientJob((array) $row);
$sync ? dispatch_sync($job) : dispatch($job);
$bar->advance();
}
$bar->finish();
$this->newLine();
$this->info("Dispatched {$total} client(s) for sync.");
app(SyncReport::class)->finish($this);
return Command::SUCCESS;
}
}