From 4b8de13ebd7f3c1a02fb8e3b72f6c9715726ee54 Mon Sep 17 00:00:00 2001 From: Lee Peuker Date: Mon, 10 Jul 2023 21:14:39 +0200 Subject: [PATCH 1/2] Combine tmdb api requests to reduce total amount --- src/Api/Tmdb/Dto/TmdbMovie.php | 7 +++++++ src/Api/Tmdb/TmdbApi.php | 9 +-------- src/Service/Tmdb/SyncMovie.php | 11 ++--------- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/Api/Tmdb/Dto/TmdbMovie.php b/src/Api/Tmdb/Dto/TmdbMovie.php index 3a7034d3..8d263bc5 100644 --- a/src/Api/Tmdb/Dto/TmdbMovie.php +++ b/src/Api/Tmdb/Dto/TmdbMovie.php @@ -21,6 +21,7 @@ private function __construct( private readonly ?string $posterPath, private readonly ?string $backdropPath, private readonly ?string $imdbId, + private readonly ?TmdbCredits $credits, ) { } @@ -41,6 +42,7 @@ public static function createFromArray(array $data) : self $data['poster_path'], $data['backdrop_path'], empty($data['imdb_id']) === true ? null : $data['imdb_id'], + empty($data['credits']) === true ? null : TmdbCredits::createFromArray($data['credits']), ); } @@ -49,6 +51,11 @@ public function getBackdropPath() : ?string return $this->backdropPath; } + public function getCredits() : ?TmdbCredits + { + return $this->credits; + } + public function getGenres() : TmdbGenreList { return $this->genres; diff --git a/src/Api/Tmdb/TmdbApi.php b/src/Api/Tmdb/TmdbApi.php index 9e6f160f..c0818790 100644 --- a/src/Api/Tmdb/TmdbApi.php +++ b/src/Api/Tmdb/TmdbApi.php @@ -23,16 +23,9 @@ public function fetchCompany(int $companyId) : TmdbCompany return TmdbCompany::createFromArray($data); } - public function fetchMovieCredits(int $movieId) : TmdbCredits - { - $data = $this->client->get('/movie/' . $movieId . '/credits'); - - return TmdbCredits::createFromArray($data); - } - public function fetchMovieDetails(int $movieId) : TmdbMovie { - $data = $this->client->get('/movie/' . $movieId); + $data = $this->client->get('/movie/' . $movieId, ['append_to_response' => 'credits']); return TmdbMovie::createFromArray($data); } diff --git a/src/Service/Tmdb/SyncMovie.php b/src/Service/Tmdb/SyncMovie.php index 61b459c1..0899178e 100644 --- a/src/Service/Tmdb/SyncMovie.php +++ b/src/Service/Tmdb/SyncMovie.php @@ -88,7 +88,8 @@ public function syncMovie(int $tmdbId) : MovieEntity $this->movieApi->updateGenres($movie->getId(), $this->genreConverter->getMovaryGenresFromTmdbMovie($tmdbMovie)); $this->movieApi->updateProductionCompanies($movie->getId(), $this->productionCompanyConverter->getMovaryProductionCompaniesFromTmdbMovie($tmdbMovie)); - $this->updateCredits($movie->getId(), $tmdbId); + $this->movieApi->updateCast($movie->getId(), $tmdbMovie->getCredits()->getCast()); + $this->movieApi->updateCrew($movie->getId(), $tmdbMovie->getCredits()->getCrew()); $this->dbConnection->commit(); } catch (\Exception $e) { @@ -105,12 +106,4 @@ public function syncMovie(int $tmdbId) : MovieEntity return $movie; } - - private function updateCredits(int $movieId, int $tmdbId) : void - { - $credits = $this->tmdbApi->fetchMovieCredits($tmdbId); - - $this->movieApi->updateCast($movieId, $credits->getCast()); - $this->movieApi->updateCrew($movieId, $credits->getCrew()); - } } From 3b50865063a4cc197c7f73e80a4fae418ef47129 Mon Sep 17 00:00:00 2001 From: Lee Peuker Date: Mon, 10 Jul 2023 21:22:44 +0200 Subject: [PATCH 2/2] Add default credits implemenation --- src/Api/Tmdb/Dto/TmdbCast.php | 7 ++++++- src/Api/Tmdb/Dto/TmdbCredits.php | 8 ++++++++ src/Api/Tmdb/Dto/TmdbCrew.php | 7 ++++++- src/Api/Tmdb/Dto/TmdbMovie.php | 6 +++--- tests/unit/Api/Tmdb/Dto/TmdbMovieTest.php | 1 + 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/Api/Tmdb/Dto/TmdbCast.php b/src/Api/Tmdb/Dto/TmdbCast.php index c33da2cf..eda11505 100644 --- a/src/Api/Tmdb/Dto/TmdbCast.php +++ b/src/Api/Tmdb/Dto/TmdbCast.php @@ -10,9 +10,14 @@ */ class TmdbCast extends AbstractList { + public static function create() : self + { + return new self(); + } + public static function createFromArray(array $data) : self { - $cast = new self(); + $cast = self::create(); foreach ($data as $castMember) { $cast->add(TmdbCastMember::createFromArray($castMember)); diff --git a/src/Api/Tmdb/Dto/TmdbCredits.php b/src/Api/Tmdb/Dto/TmdbCredits.php index 98ef6c88..3b153704 100644 --- a/src/Api/Tmdb/Dto/TmdbCredits.php +++ b/src/Api/Tmdb/Dto/TmdbCredits.php @@ -10,6 +10,14 @@ private function __construct( ) { } + public static function create() : self + { + return new self( + TmdbCast::create(), + TmdbCrew::create(), + ); + } + public static function createFromArray(array $data) : self { return new self( diff --git a/src/Api/Tmdb/Dto/TmdbCrew.php b/src/Api/Tmdb/Dto/TmdbCrew.php index ba81b2b3..7e9f29e2 100644 --- a/src/Api/Tmdb/Dto/TmdbCrew.php +++ b/src/Api/Tmdb/Dto/TmdbCrew.php @@ -10,9 +10,14 @@ */ class TmdbCrew extends AbstractList { + public static function create() : self + { + return new self(); + } + public static function createFromArray(array $data) : self { - $cast = new self(); + $cast = self::create(); foreach ($data as $crewMember) { $cast->add(TmdbCrewMember::createFromArray($crewMember)); diff --git a/src/Api/Tmdb/Dto/TmdbMovie.php b/src/Api/Tmdb/Dto/TmdbMovie.php index 8d263bc5..892c728a 100644 --- a/src/Api/Tmdb/Dto/TmdbMovie.php +++ b/src/Api/Tmdb/Dto/TmdbMovie.php @@ -21,7 +21,7 @@ private function __construct( private readonly ?string $posterPath, private readonly ?string $backdropPath, private readonly ?string $imdbId, - private readonly ?TmdbCredits $credits, + private readonly TmdbCredits $credits, ) { } @@ -42,7 +42,7 @@ public static function createFromArray(array $data) : self $data['poster_path'], $data['backdrop_path'], empty($data['imdb_id']) === true ? null : $data['imdb_id'], - empty($data['credits']) === true ? null : TmdbCredits::createFromArray($data['credits']), + empty($data['credits']) === true ? TmdbCredits::create() : TmdbCredits::createFromArray($data['credits']), ); } @@ -51,7 +51,7 @@ public function getBackdropPath() : ?string return $this->backdropPath; } - public function getCredits() : ?TmdbCredits + public function getCredits() : TmdbCredits { return $this->credits; } diff --git a/tests/unit/Api/Tmdb/Dto/TmdbMovieTest.php b/tests/unit/Api/Tmdb/Dto/TmdbMovieTest.php index 63f445ab..21113030 100644 --- a/tests/unit/Api/Tmdb/Dto/TmdbMovieTest.php +++ b/tests/unit/Api/Tmdb/Dto/TmdbMovieTest.php @@ -28,6 +28,7 @@ public function testWithAllPossibleValuesEmptyOrNull() : void 'poster_path' => null, 'backdrop_path' => null, 'imdb_id' => null, + 'credits' => null, ]; $subject = TmdbMovie::createFromArray($testData);