From fc650b3be1460f18274b98b8c155bc12be88ce46 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Mon, 30 Jun 2025 01:13:02 -0500 Subject: [PATCH] Clear caches when adding or removing a flag. Block adding or removing flags from published auditions Closes #91 --- app/Observers/EntryFlagObserver.php | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/app/Observers/EntryFlagObserver.php b/app/Observers/EntryFlagObserver.php index 7747ca1..6338aa5 100644 --- a/app/Observers/EntryFlagObserver.php +++ b/app/Observers/EntryFlagObserver.php @@ -2,17 +2,30 @@ namespace App\Observers; +use App\Exceptions\AuditionAdminException; use App\Models\Doubler; use App\Models\EntryFlag; +use Illuminate\Support\Facades\Cache; class EntryFlagObserver { /** * Handle the EntryFlag "created" event. */ + public function creating(EntryFlag $entryFlag): void + { + if (in_array($entryFlag->flag_name, ['declined', 'no_show', 'failed_prelim'])) { + if ($entryFlag->entry->audition->hasFlag('seats_published') || $entryFlag->entry->audition->hasFlag('advancement_published')) { + throw new AuditionAdminException('Cannot change flag for published auditions.'); + } + } + } + public function created(EntryFlag $entryFlag): void { Doubler::syncDoublers(); + Cache::forget('rank_advancement_'.$entryFlag->entry->audition_id); + Cache::forget('rank_seating_'.$entryFlag->entry->audition_id); } @@ -22,14 +35,29 @@ class EntryFlagObserver public function updated(EntryFlag $entryFlag): void { Doubler::syncDoublers(); + Cache::forget('rank_advancement_'.$entryFlag->entry->audition_id); + Cache::forget('rank_seating_'.$entryFlag->entry->audition_id); + } /** * Handle the EntryFlag "deleted" event. */ + public function deleting(EntryFlag $entryFlag): void + { + if (in_array($entryFlag->flag_name, ['declined', 'no_show', 'failed_prelim'])) { + if ($entryFlag->entry->audition->hasFlag('seats_published') || $entryFlag->entry->audition->hasFlag('advancement_published')) { + throw new AuditionAdminException('Cannot change flag for published auditions.'); + } + } + } + public function deleted(EntryFlag $entryFlag): void { Doubler::syncDoublers(); + Cache::forget('rank_advancement_'.$entryFlag->entry->audition_id); + Cache::forget('rank_seating_'.$entryFlag->entry->audition_id); + } /**