<?php namespace App\Console\Commands\Areafix; use Illuminate\Console\Command; use App\Jobs\AreafixRescan; use App\Models\{Address,Echoarea}; class Rescan extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'areafix:rescan' .' {ftn : FTN Address}' .' {area : Echoarea Tag}' .' {days? : Limit to messages authored days ago}' .' {--j|queue : Queue the Job}' .' {--Q|queuename=default : Queue on queue}' .' {--R|export : Re-export previously sent messages}'; /** * The console command description. * * @var string */ protected $description = 'Resend some echomail to a node'; /** * Execute the console command. * * @return int * @throws \Exception */ public function handle(): int { if (($this->argument('days')) && (! is_numeric($this->argument('days')))) throw new \Exception('Days must be numeric: '.$this->argument('days')); $ao = Address::findFtn($this->argument('ftn')); if (! $ao) throw new \Exception('FTN not found: '.$this->argument('ftn')); // Check that the area belongs to the domain for the FTN if (! $this->argument('area')) throw new \Exception('Areaname is required'); $eo = Echoarea::where('name',$this->argument('area'))->sole(); if ($eo->domain_id !== $ao->zone->domain_id) throw new \Exception(sprintf('Echo area [%s] is not in domain [%s] for FTN [%s]',$eo->name,$ao->zone->domain->name,$ao->ftn)); if ($this->option('queue')) AreafixRescan::dispatch($ao,$eo,$this->argument('days'))->onQueue($this->option('queuename')); else AreafixRescan::dispatchSync($ao,$eo,$this->argument('days')); return self::SUCCESS; } }