From 300c2574eaf057800f799c4dc4d92dadedf8cac5 Mon Sep 17 00:00:00 2001 From: DoarMihai Date: Wed, 8 Jan 2025 02:15:22 +0200 Subject: [PATCH] [#2] networks --- app/Models/Network.php | 16 +++++++++ app/Models/Show.php | 5 +++ .../MediaProcessing/ShowProcessingService.php | 36 +++++++++++++++++-- ...1_08_000956_create_show_networks_table.php | 29 +++++++++++++++ ...025_01_08_001007_create_networks_table.php | 32 +++++++++++++++++ 5 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 app/Models/Network.php create mode 100644 database/migrations/2025_01_08_000956_create_show_networks_table.php create mode 100644 database/migrations/2025_01_08_001007_create_networks_table.php diff --git a/app/Models/Network.php b/app/Models/Network.php new file mode 100644 index 0000000..8898a7b --- /dev/null +++ b/app/Models/Network.php @@ -0,0 +1,16 @@ +belongsToMany(Genre::class, 'show_genres', 'show_id', 'genre_id'); } + + public function networks() + { + return $this->belongsToMany(Network::class, 'show_networks', 'show_id', 'network_id'); + } } diff --git a/app/Service/MediaProcessing/ShowProcessingService.php b/app/Service/MediaProcessing/ShowProcessingService.php index 4067cf8..39e7c61 100644 --- a/app/Service/MediaProcessing/ShowProcessingService.php +++ b/app/Service/MediaProcessing/ShowProcessingService.php @@ -11,6 +11,7 @@ use App\Models\Image; use App\Models\ItemToFetch; use App\Models\ItemToFetchJobs; use App\Models\Keyword; +use App\Models\Network; use App\Models\Person; use App\Models\Season; use App\Models\Show; @@ -80,9 +81,11 @@ class ShowProcessingService implements ProcessingInterface $this->processGenres($item, $tmdbShow['genres']); } - // @todo process genres + if (!empty($tmdbShow['networks'])) { + $this->processNetworks($item, $tmdbShow['networks']); + } + // @todo process created_by - // @todo process networks // @todo process production countries // @todo process production companies @@ -762,4 +765,33 @@ class ShowProcessingService implements ProcessingInterface } } } + + private function processNetworks($item, array $networks) + { + foreach ($networks as $tmdbNetwork) { + $network = Network::where('name', $tmdbNetwork['name']) + ->where('tmdb_id', $tmdbNetwork['id']) + ->first(); + + if (!$network) { + $network = Network::create([ + 'name' => $tmdbNetwork['name'], + 'slug' => Str::slug($tmdbNetwork['name']), + 'tmdb_id' => $tmdbNetwork['id'], + 'logo_path' => $tmdbNetwork['logo_path'], + 'origin_country' => $tmdbNetwork['origin_country'], + ]); + } + + $show = Show::where('tmdb_id', $item->tmdb_id)->first(); + + if ($show->whereHas('networks', function ($query) use ($network) { + $query->where('tmdb_id', '=', $network->tmdb_id); + })->exists()) { + return; + } else { + $show->networks()->attach($network); + } + } + } } diff --git a/database/migrations/2025_01_08_000956_create_show_networks_table.php b/database/migrations/2025_01_08_000956_create_show_networks_table.php new file mode 100644 index 0000000..19a93f1 --- /dev/null +++ b/database/migrations/2025_01_08_000956_create_show_networks_table.php @@ -0,0 +1,29 @@ +id(); + $table->unsignedBigInteger('show_id'); + $table->unsignedBigInteger('network_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('show_networks'); + } +}; diff --git a/database/migrations/2025_01_08_001007_create_networks_table.php b/database/migrations/2025_01_08_001007_create_networks_table.php new file mode 100644 index 0000000..776a9dc --- /dev/null +++ b/database/migrations/2025_01_08_001007_create_networks_table.php @@ -0,0 +1,32 @@ +id(); + $table->unsignedBigInteger('tmdb_id'); + $table->string('logo_path')->nullable(); + $table->string('name')->nullable(); + $table->string('slug')->nullable(); + $table->string('origin_country')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('networks'); + } +};