<?php namespace App\Jobs; use Carbon\Carbon; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Notification; use App\Models\{Address, Domain, System}; use App\Notifications\Netmails\NodesNew as NotificationNodesNew; class NodesNew implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; private const LOGKEY = 'JNN'; private ?Carbon $since; // New nodes since this date private Address $ao; // Domain we are processing private Domain $do; // Domain we are processing /** * Create a new job instance. */ public function __construct(Domain $do,Carbon $since=NULL,Address $ao=NULL) { $this->do = $do->withoutRelations(); $this->ao = $ao?->withoutRelations(); $this->since = $since; } /** * Execute the job. */ public function handle(): void { $since = ($this->since ?: Carbon::parse('last saturday'))->startOfDay(); $result = Address::FTN() ->ActiveFTN() ->join('systems',['systems.id'=>'addresses.system_id']) ->join('system_zone',['system_zone.system_id'=>'systems.id','system_zone.zone_id'=>'zones.id']) ->whereIn('zones.id',$this->do->zones->pluck('id')) ->where('systems.active',TRUE) ->where('systems.created_at','>=',$since) ->get(); if ($result->count()) { Log::notice(sprintf('%s:- Sending new nodes since [%s] (%d)',self::LOGKEY,$since,$result->count())); Notification::route('netmail',$this->ao->withoutRelations()) ->notify(new NotificationNodesNew( $since, $result, )); } else Log::notice(sprintf('%s:- No nodes since [%s]',self::LOGKEY,$since)); } }