From 241366130e607624c27365249ab3d01449127ecf Mon Sep 17 00:00:00 2001 From: Yassine Doghri <yassine@doghri.fr> Date: Mon, 10 Jan 2022 16:52:12 +0000 Subject: [PATCH] chore(clips): clear video clip and soundbite cache on delete --- app/Models/ClipModel.php | 56 +++++++++---------- .../Admin/Controllers/SoundbiteController.php | 5 +- .../Controllers/VideoClipsController.php | 5 +- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/app/Models/ClipModel.php b/app/Models/ClipModel.php index fca84b0ce5..1d9172b7df 100644 --- a/app/Models/ClipModel.php +++ b/app/Models/ClipModel.php @@ -109,33 +109,6 @@ class ClipModel extends Model return $found; } - /** - * Gets all video clips for an episode - * - * @return BaseClip[] - */ - public function getVideoClips(int $podcastId, int $episodeId): array - { - $cacheName = "podcast#{$podcastId}_episode#{$episodeId}_video-clips"; - if (! ($found = cache($cacheName))) { - $found = $this->where([ - 'episode_id' => $episodeId, - 'podcast_id' => $podcastId, - 'type' => 'video', - ]) - ->orderBy('start_time') - ->findAll(); - - foreach ($found as $key => $videoClip) { - $found[$key] = new VideoClip($videoClip->toArray()); - } - - cache() - ->save($cacheName, $found, DECADE); - } - return $found; - } - /** * Gets scheduled video clips for an episode * @@ -157,6 +130,23 @@ class ClipModel extends Model return $found; } + public function deleteVideoClip(int $podcastId, int $episodeId, int $clipId): BaseResult | bool + { + $this->clearVideoClipCache($clipId); + + return $this->delete([ + 'podcast_id' => $podcastId, + 'episode_id' => $episodeId, + 'id' => $clipId, + ]); + } + + public function clearVideoClipCache(int $clipId): void + { + cache() + ->delete("video-clip#{$clipId}"); + } + public function getSoundbiteById(int $soundbiteId): ?Soundbite { $cacheName = "soundbite#{$soundbiteId}"; @@ -206,8 +196,7 @@ class ClipModel extends Model public function deleteSoundbite(int $podcastId, int $episodeId, int $clipId): BaseResult | bool { - cache() - ->delete("podcast#{$podcastId}_episode#{$episodeId}_soundbites"); + $this->clearSoundbiteCache($podcastId, $episodeId, $clipId); return $this->delete([ 'podcast_id' => $podcastId, @@ -216,6 +205,11 @@ class ClipModel extends Model ]); } - // cache() - // ->deleteMatching("page_podcast#{$clip->podcast_id}_episode#{$clip->episode_id}_*"); + public function clearSoundbiteCache(int $podcastId, int $episodeId, int $clipId): void + { + cache() + ->delete("podcast#{$podcastId}_episode#{$episodeId}_soundbites"); + cache() + ->delete("soundbite#{$clipId}"); + } } diff --git a/modules/Admin/Controllers/SoundbiteController.php b/modules/Admin/Controllers/SoundbiteController.php index d9abe12726..e14805caa8 100644 --- a/modules/Admin/Controllers/SoundbiteController.php +++ b/modules/Admin/Controllers/SoundbiteController.php @@ -150,9 +150,12 @@ class SoundbiteController extends BaseController if ($soundbite->media === null) { // delete Clip directly - (new ClipModel())->delete($soundbite->id); + (new ClipModel())->deleteSoundbite($this->podcast->id, $this->episode->id, $soundbite->id); } else { + (new ClipModel())->clearSoundbiteCache($this->podcast->id, $this->episode->id, $soundbite->id); + $mediaModel = new MediaModel(); + // delete the soundbite file, the clip will be deleted on cascade if (! $mediaModel->deleteMedia($soundbite->media)) { return redirect() ->back() diff --git a/modules/Admin/Controllers/VideoClipsController.php b/modules/Admin/Controllers/VideoClipsController.php index 2552b5eac4..2a7b81a268 100644 --- a/modules/Admin/Controllers/VideoClipsController.php +++ b/modules/Admin/Controllers/VideoClipsController.php @@ -211,9 +211,12 @@ class VideoClipsController extends BaseController if ($videoClip->media === null) { // delete Clip directly - (new ClipModel())->delete($videoClip->id); + (new ClipModel())->deleteVideoClip($this->podcast->id, $this->episode->id, $videoClip->id); } else { + (new ClipModel())->clearVideoClipCache($videoClip->id); + $mediaModel = new MediaModel(); + // delete the videoClip file, the clip will be deleted on cascade if (! $mediaModel->deleteMedia($videoClip->media)) { return redirect() ->back() -- GitLab