Files
FlightsAPI/app/Observers/FlightObserver.php
T
2026-07-02 23:11:46 +10:00

62 lines
1.7 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
{
protected function clearCache(UserFlight $flight): void
{
Cache::forget("user_flights_{$flight->user->id}");
$flight
->user
->followers()
->get()
->each(fn ($follower) => Cache::forget("user_following_flights_{$follower->id}"));
}
/**
* Recalculate after a flight is created.
*/
public function created(UserFlight $flight): void
{
$flight->user->calculateAchievements();
$this->clearCache($flight);
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->calculateAchievements();
$this->clearCache($flight);
}
/**
* Recalculate after a flight is deleted.
* Previously earned achievements may no longer be valid.
*/
public function deleted(UserFlight $flight): void
{
$flight->user->calculateAchievements();
$this->clearCache($flight);
if ($flight->departure_date->isFuture()) {
new FollowerNotificationService()->notifyFlightEvent($flight, FlightNotificationType::Cancelled);
}
}
}