46 lines
1.3 KiB
PHP
46 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Observers;
|
|
|
|
use App\Enums\FlightNotificationType;
|
|
use App\Models\User;
|
|
use App\Models\UserFlight;
|
|
use App\Services\FollowerNotificationService;
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
class FlightObserver
|
|
{
|
|
|
|
/**
|
|
* Recalculate after a flight is created.
|
|
*/
|
|
public function created(UserFlight $flight): void
|
|
{
|
|
$flight->user->calculateAchievementsAndClearCache();
|
|
new FollowerNotificationService()->notifyFlightEvent($flight, FlightNotificationType::forCreation($flight));
|
|
}
|
|
|
|
/**
|
|
* Recalculate after a flight is updated.
|
|
* Cabin class, flight type, airline, etc. may have changed,
|
|
* which could unlock or revoke achievements.
|
|
*/
|
|
public function updated(UserFlight $flight): void
|
|
{
|
|
\Log::info('Observer fired for flight ' . $flight->id);
|
|
$flight->user->calculateAchievementsAndClearCache();
|
|
}
|
|
|
|
/**
|
|
* Recalculate after a flight is deleted.
|
|
* Previously earned achievements may no longer be valid.
|
|
*/
|
|
public function deleted(UserFlight $flight): void
|
|
{
|
|
$flight->user->calculateAchievementsAndClearCache();
|
|
if ($flight->departure_date->isFuture()) {
|
|
new FollowerNotificationService()->notifyFlightEvent($flight, FlightNotificationType::Cancelled);
|
|
}
|
|
}
|
|
}
|