From a44de7348e1f8dfd0dd6a75ee62713489aafbf6d Mon Sep 17 00:00:00 2001 From: DoarMihai Date: Mon, 30 Dec 2024 02:48:39 +0200 Subject: [PATCH] [#1] added keywords to processing --- app/Models/Keyword.php | 10 ++++++ app/Models/Movie.php | 5 +++ .../MovieProcessingService.php | 35 +++++++++++++++++++ ..._30_004421_create_movie_keywords_table.php | 29 +++++++++++++++ ...024_12_30_004431_create_keywords_table.php | 29 +++++++++++++++ 5 files changed, 108 insertions(+) create mode 100644 app/Models/Keyword.php create mode 100644 database/migrations/2024_12_30_004421_create_movie_keywords_table.php create mode 100644 database/migrations/2024_12_30_004431_create_keywords_table.php diff --git a/app/Models/Keyword.php b/app/Models/Keyword.php new file mode 100644 index 0000000..b46939c --- /dev/null +++ b/app/Models/Keyword.php @@ -0,0 +1,10 @@ +belongsToMany(Image::class, 'movie_images', 'movie_id', 'image_id'); } + + public function keywords() + { + return $this->belongsToMany(Keyword::class, 'movie_keywords', 'movie_id', 'leyword_id'); + } } diff --git a/app/Service/MediaProcessing/MovieProcessingService.php b/app/Service/MediaProcessing/MovieProcessingService.php index 5466dad..4507c99 100644 --- a/app/Service/MediaProcessing/MovieProcessingService.php +++ b/app/Service/MediaProcessing/MovieProcessingService.php @@ -5,6 +5,7 @@ namespace App\Service\MediaProcessing; use App\Models\Genre; use App\Models\Image; use App\Models\ItemToFetchJobs; +use App\Models\Keyword; use App\Models\Movie; use App\Models\MovieAlternativeTitle; use App\Models\MovieCollection; @@ -149,6 +150,40 @@ class MovieProcessingService implements ProcessingInterface $this->removeElementFromRemainingJobs($item->tmdb_id, ItemToFetchJobs::JOB_IMAGES); } + private function getKeywords($item) + { + $tmdbKeywords = $this->moviesApi->getKeywords($item->tmdb_id); + + if (empty($tmdbKeywords) || !isset($tmdbKeywords['keywords'])) { + return; + } + + $movie = Movie::where('tmdb_id', $item->tmdb_id)->first(); + + foreach ($tmdbKeywords['keywords'] as $tmdbKeyword) { + $existingKeyword = Keyword::where('tmdb_id', $tmdbKeyword['id'])->first(); + + if (!$existingKeyword) { + $existingKeyword = Keyword::create([ + 'name' => $tmdbKeyword['name'], + 'tmdb_id' => $tmdbKeyword['id'], + ]); + } + + if ($movie->whereHas('keywords', function ($query) use ($existingKeyword) { + $query->where('tmdb_id', $existingKeyword->tmdb_id); + })->exists()) { + echo "Movie has keyword | "; + return; + } else { + echo "Movie does not have keyword | "; + $movie->keywords()->attach($existingKeyword); + } + } + + $this->removeElementFromRemainingJobs($item->tmdb_id, ItemToFetchJobs::JOB_KEYWORDS); + } + private function processMovieCollection(int $movieId, $belongsToCollection) { $movieCollection = MovieCollection::where('tmdb_id', $belongsToCollection['id'])->first(); diff --git a/database/migrations/2024_12_30_004421_create_movie_keywords_table.php b/database/migrations/2024_12_30_004421_create_movie_keywords_table.php new file mode 100644 index 0000000..410439c --- /dev/null +++ b/database/migrations/2024_12_30_004421_create_movie_keywords_table.php @@ -0,0 +1,29 @@ +id(); + $table->unsignedBigInteger('movie_id'); + $table->unsignedBigInteger('keyword_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('movie_keywords'); + } +}; diff --git a/database/migrations/2024_12_30_004431_create_keywords_table.php b/database/migrations/2024_12_30_004431_create_keywords_table.php new file mode 100644 index 0000000..1abea52 --- /dev/null +++ b/database/migrations/2024_12_30_004431_create_keywords_table.php @@ -0,0 +1,29 @@ +id(); + $table->string('tmdb_id'); + $table->string('name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('keywords'); + } +};