52 lines
1.6 KiB
PHP
52 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace Modules\Core\Command;
|
|
|
|
use Illuminate\Console\Command;
|
|
use Lunar\Models\ProductVariant;
|
|
use Modules\Core\Catalog\Services\SkuBackfillService;
|
|
|
|
/**
|
|
* CLI wrapper (--dry-run, a progress bar) around Catalog\Services\
|
|
* SkuBackfillService — see that class's own docblock for the actual
|
|
* backfill logic, also called automatically after a Shopify import (see
|
|
* MigrateImport\Jobs\RunMigrateImportJob).
|
|
*/
|
|
class BackfillMissingSkusCommand extends Command
|
|
{
|
|
protected $signature = 'boboko:catalog:backfill-skus {--dry-run : List what would change without writing}';
|
|
|
|
protected $description = 'Generate a SKU for every product variant that is missing one';
|
|
|
|
public function handle(SkuBackfillService $backfill): void
|
|
{
|
|
$dryRun = (bool) $this->option('dry-run');
|
|
|
|
$total = ProductVariant::query()->whereNull('sku')->count();
|
|
|
|
if ($total === 0) {
|
|
$this->info('No variants are missing a SKU.');
|
|
|
|
return;
|
|
}
|
|
|
|
$this->info(($dryRun ? '[dry-run] ' : '') . "Backfilling SKUs for {$total} variant(s)...");
|
|
|
|
$bar = $this->output->createProgressBar($total);
|
|
$bar->start();
|
|
|
|
$backfill->backfill($dryRun, function (ProductVariant $variant, string $sku) use ($dryRun, $bar) {
|
|
if ($dryRun) {
|
|
$this->newLine();
|
|
$this->line("Variant {$variant->id}: sku => {$sku}");
|
|
}
|
|
|
|
$bar->advance();
|
|
});
|
|
|
|
$bar->finish();
|
|
$this->newLine();
|
|
$this->info($dryRun ? 'Dry run complete — no changes were written.' : 'Done.');
|
|
}
|
|
}
|