From d391deaf8a83c693f9085ef50502e83b7ad1d909 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 15 Aug 2019 22:12:30 -0600 Subject: [PATCH] Update ImportCities command, clean up --- app/Console/Commands/ImportCities.php | 78 +++++++++++++++++++-------- 1 file changed, 57 insertions(+), 21 deletions(-) diff --git a/app/Console/Commands/ImportCities.php b/app/Console/Commands/ImportCities.php index a5f36fcbe..6062ef8d5 100644 --- a/app/Console/Commands/ImportCities.php +++ b/app/Console/Commands/ImportCities.php @@ -8,6 +8,31 @@ use Illuminate\Support\Str; class ImportCities extends Command { + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'import:cities {chunk=1000}'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Import Cities to database'; + + /** + * Checksum of city dataset. + * + */ + const CHECKSUM = 'e203c0247538788b2a91166c7cf4b95f58291d998f514e9306d315aa72b09e48bfd3ddf310bf737afc4eefadca9083b8ff796c67796c6bd8e882a3d268bd16af'; + + /** + * List of shortened countries. + * + * @var array + */ protected $countries = [ 'AE' => 'UAE', 'BA' => 'Bosnia-Herzegovina', @@ -31,18 +56,7 @@ class ImportCities extends Command 'VE' => 'Venezuela', 'XK' => 'Kosovo' ]; - /** - * The name and signature of the console command. - * - * @var string - */ - protected $signature = 'import:cities {chunk=1000}'; - /** - * The console command description. - * - * @var string - */ - protected $description = 'Import Cities to database'; + /** * Create a new command instance. * @@ -52,6 +66,7 @@ class ImportCities extends Command { parent::__construct(); } + /** * Execute the console command. * @@ -61,7 +76,7 @@ class ImportCities extends Command { $path = storage_path('app/cities.json'); - if(hash_file('sha512', $path) !== 'e203c0247538788b2a91166c7cf4b95f58291d998f514e9306d315aa72b09e48bfd3ddf310bf737afc4eefadca9083b8ff796c67796c6bd8e882a3d268bd16af') { + if(hash_file('sha512', $path) !== self::CHECKSUM) { $this->error('Invalid or corrupt storage/app/cities.json data.'); $this->line(''); $this->info('Run the following command to fix:'); @@ -73,36 +88,57 @@ class ImportCities extends Command $this->error('Missing storage/app/cities.json file!'); return; } + if (Place::count() > 0) { DB::table('places')->truncate(); } + $this->info('Importing city data into database ...'); - $cities = file_get_contents($path); - $cities = json_decode($cities); + + $cities = json_decode(file_get_contents($path)); $cityCount = count($cities); + + $this->line(''); $this->info("Found {$cityCount} cities to insert ..."); + $this->line(''); + $bar = $this->output->createProgressBar($cityCount); $bar->start(); + $buffer = []; $count = 0; + foreach ($cities as $city) { - $country = $this->codeToCountry($city->country); - $buffer[] = ["name" => $city->name, "slug" => Str::slug($city->name), "country" => $country, "lat" => $city->lat, "long" => $city->lng]; + $buffer[] = [ + "name" => $city->name, + "slug" => Str::slug($city->name), + "country" => $this->codeToCountry($city->country), + "lat" => $city->lat, + "long" => $city->lng + ]; + $count++; + if ($count % $this->argument('chunk') == 0) { - $this->insertBuffer($buffer, $count); + $this->insertBuffer($buffer); $bar->advance(count($buffer)); $buffer = []; } } - $this->insertBuffer($buffer, $count); + $this->insertBuffer($buffer); + $bar->advance(count($buffer)); + $bar->finish(); - $this->info('Successfully imported ' . $count . ' entries.'); + + $this->line(''); + $this->line(''); + $this->info('Successfully imported ' . $cityCount . ' entries!'); + $this->line(''); return; } - private function insertBuffer($buffer, $count) + private function insertBuffer($buffer) { DB::table('places')->insert($buffer); }