feat: new Discover section shows watch providers for results
This commit is contained in:
@@ -6,9 +6,11 @@ use Aimeos\Map;
|
||||
use App\Base\Enum\MediaType;
|
||||
use App\Base\Util\ImdbMatcher;
|
||||
use App\Tmdb\Dto\TmdbEpisodeDto;
|
||||
use App\Tmdb\Dto\WatchProviderDto;
|
||||
use Psr\Cache\CacheItemPoolInterface;
|
||||
use Symfony\Component\DependencyInjection\Attribute\Autowire;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
use Symfony\Component\HttpClient\HttpClient;
|
||||
use Symfony\Component\Serializer\SerializerInterface;
|
||||
use Tmdb\Api\Find;
|
||||
use Tmdb\Client;
|
||||
@@ -31,7 +33,7 @@ use Tmdb\Token\Api\BearerToken;
|
||||
class TmdbClient
|
||||
{
|
||||
const POSTER_IMG_PATH = "https://image.tmdb.org/t/p/w500";
|
||||
const APPEND_TO_RESPONSE = 'external_ids,credits,watch/providers';
|
||||
const APPEND_TO_RESPONSE = 'external_ids,credits';
|
||||
|
||||
protected Client $client;
|
||||
protected MovieRepository $movieRepository;
|
||||
@@ -139,6 +141,50 @@ class TmdbClient
|
||||
return $this->parseListOfResults($results);
|
||||
}
|
||||
|
||||
public function discoverMovies(array $genres = [], int $page = 1, int $pageSize = 24, array $params = []): TmdbResult|Map
|
||||
{
|
||||
if (!empty($genres) && $genres[0] instanceof TmdbMovieGenre) {
|
||||
$genres = array_map(fn ($genre) => $genre->value, $genres);
|
||||
}
|
||||
$results = $this->discoverRepository->getApi()->discoverMovies([
|
||||
'page' => $page,
|
||||
'page_size' => $pageSize,
|
||||
'with_genres' => implode(',', $genres),
|
||||
'with_original_language' => $this->originalLanguage,
|
||||
'append_to_response' => static::APPEND_TO_RESPONSE,
|
||||
]);
|
||||
$results['results'] = Map::from($results['results'])->map(function ($result) {
|
||||
$result['media_type'] = MediaType::Movie->value;
|
||||
return $result;
|
||||
});
|
||||
|
||||
return $this->parseListOfResults(
|
||||
$results,
|
||||
);
|
||||
}
|
||||
|
||||
public function discoverTvshows(array $genres = [], int $page = 1, int $pageSize = 24, array $params = []): TmdbResult|Map
|
||||
{
|
||||
if (!empty($genres) && $genres[0] instanceof TmdbTvShowGenre) {
|
||||
$genres = array_map(fn ($genre) => $genre->value, $genres);
|
||||
}
|
||||
$results = $this->discoverRepository->getApi()->discoverTv([
|
||||
'page' => $page,
|
||||
'page_size' => $pageSize,
|
||||
'with_genres' => implode(',', $genres),
|
||||
'with_original_language' => $this->originalLanguage,
|
||||
'append_to_response' => static::APPEND_TO_RESPONSE,
|
||||
]);
|
||||
$results['results'] = Map::from($results['results'])->map(function ($result) {
|
||||
$result['media_type'] = MediaType::TvShow->value;
|
||||
return $result;
|
||||
});
|
||||
|
||||
return $this->parseListOfResults(
|
||||
$results,
|
||||
);
|
||||
}
|
||||
|
||||
public function movieDetails(string $imdbId): ?TmdbResult
|
||||
{
|
||||
$tmdbId = $this->findByImdbId($imdbId)['id'];
|
||||
@@ -201,6 +247,14 @@ class TmdbClient
|
||||
);
|
||||
}
|
||||
|
||||
public function watchProviders(string $tmdbId, string $mediaType): Map
|
||||
{
|
||||
$results = $this->repos[$mediaType]->getApi()->getWatchProviders($tmdbId)['results']['US']['flatrate'];
|
||||
return Map::from($results)->map(function ($result) {
|
||||
return $this->serializer->denormalize($result, WatchProviderDto::class);
|
||||
});
|
||||
}
|
||||
|
||||
public function popularMovies(int $resultCount = 6): Map
|
||||
{
|
||||
$results = $this->discoverRepository->getApi()->discoverMovies([
|
||||
|
||||
Reference in New Issue
Block a user