62 lines
1.8 KiB
PHP
62 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Models\Aircraft;
|
|
use App\Models\Notification;
|
|
use App\Models\User;
|
|
use App\Models\UserFlight;
|
|
use Illuminate\Console\Attributes\Description;
|
|
use Illuminate\Console\Attributes\Signature;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
#[Signature('app:update-departed-flights')]
|
|
#[Description('Command description')]
|
|
class UpdateDepartedFlights extends Command
|
|
{
|
|
/**
|
|
* Execute the console command.
|
|
*/
|
|
public function handle(): void
|
|
{
|
|
$now = now()->utc();
|
|
|
|
$userFlights = UserFlight::where('departure_date', '<=', $now->toDateTimeString())
|
|
->where(function ($query) {
|
|
$query->whereNull('departure_processed_at')
|
|
->orWhereColumn('departure_processed_at', '<', 'departure_date');
|
|
})
|
|
->get();
|
|
|
|
|
|
foreach ($userFlights as $flight) {
|
|
$flight->update(['departure_processed_at' => $now]);
|
|
}
|
|
}
|
|
|
|
protected function notifyFollowersOnDeparture(UserFlight $flight): void
|
|
{
|
|
$user = $flight->user;
|
|
$title = "{$user->name} is taking off!";
|
|
$flightNumber = $flight->flight_number ? "On {$flight->flight_number} from" : 'From';
|
|
$body = "{$flightNumber} {$flight->departureAirport->municipality} → {$flight->arrivalAirport->municipality}";
|
|
$url = route('profile.flight', [$flight->id]);
|
|
|
|
$user->followers()->get()->each(function (User $follower) use ($title, $body, $url) {
|
|
$notify = $follower->getSetting('notify_on_flight_departure');
|
|
|
|
if ($notify) {
|
|
Notification::create([
|
|
'user_id' => $follower->id,
|
|
'title' => $title,
|
|
'body' => $body,
|
|
'url' => $url,
|
|
]);
|
|
}
|
|
|
|
}
|
|
);
|
|
}
|
|
}
|