62 lines
1.7 KiB
PHP
62 lines
1.7 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace Modules\Core\Command;
|
||
|
|
|
||
|
|
use Illuminate\Console\Command;
|
||
|
|
use Modules\Core\MigrateImport\ImportSpec;
|
||
|
|
use Modules\Core\MigrateImport\RunMigrateImportJob;
|
||
|
|
|
||
|
|
class MigrateImportCommand extends Command
|
||
|
|
{
|
||
|
|
protected $signature = "boboko:migrate:import
|
||
|
|
{--source= : The source platform to import from}
|
||
|
|
{--type= : The import mechanism for the chosen source}
|
||
|
|
{--file= : Path to the export file (when type is export)}";
|
||
|
|
|
||
|
|
protected $description = "Migrate data (products, customers, etc.) from an external source";
|
||
|
|
|
||
|
|
// Supported sources. Only "shopify" is wired up for now.
|
||
|
|
private const SOURCES = [
|
||
|
|
"shopify",
|
||
|
|
// "woocommerce",
|
||
|
|
];
|
||
|
|
|
||
|
|
// Supported import types per source. Only "export" is wired up for now.
|
||
|
|
private const TYPES = [
|
||
|
|
"export",
|
||
|
|
// "api",
|
||
|
|
];
|
||
|
|
|
||
|
|
public function handle(): void
|
||
|
|
{
|
||
|
|
$source = $this->option("source")
|
||
|
|
?? $this->choice("Select a source:", self::SOURCES, 0);
|
||
|
|
|
||
|
|
$type = $this->option("type")
|
||
|
|
?? $this->choice("Select an import type:", self::TYPES, 0);
|
||
|
|
|
||
|
|
if ($type === "api") {
|
||
|
|
$credentials = [
|
||
|
|
"api_key" => $this->secret("API key:"),
|
||
|
|
"api_secret" => $this->secret("API secret:"),
|
||
|
|
];
|
||
|
|
$filePath = null;
|
||
|
|
} else {
|
||
|
|
$filePath = $this->option("file")
|
||
|
|
?? $this->ask("Path to the export file:");
|
||
|
|
$credentials = null;
|
||
|
|
}
|
||
|
|
|
||
|
|
$spec = new ImportSpec(
|
||
|
|
source: $source,
|
||
|
|
type: $type,
|
||
|
|
filePath: $filePath,
|
||
|
|
credentials: $credentials,
|
||
|
|
);
|
||
|
|
|
||
|
|
RunMigrateImportJob::dispatch($spec);
|
||
|
|
|
||
|
|
$this->info("Import queued.");
|
||
|
|
}
|
||
|
|
}
|