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 3a7034d3..892c728a 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 ? TmdbCredits::create() : 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()); - } } 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);