feat: search results
This commit is contained in:
@@ -2,7 +2,8 @@
|
||||
|
||||
namespace App\Tmdb;
|
||||
|
||||
use App\ValueObject\MediaResult;
|
||||
use App\Enum\MediaType;
|
||||
use App\Tmdb\TmdbResult;
|
||||
use App\ValueObject\ResultFactory;
|
||||
use Symfony\Component\DependencyInjection\Attribute\Autowire;
|
||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||
@@ -31,7 +32,7 @@ use Tmdb\Repository\TvSeasonRepository;
|
||||
use Tmdb\Token\Api\ApiToken;
|
||||
use Tmdb\Token\Api\BearerToken;
|
||||
|
||||
class Client
|
||||
class Tmdb
|
||||
{
|
||||
protected Client $client;
|
||||
|
||||
@@ -178,8 +179,8 @@ class Client
|
||||
throw new \Exception("A media type must be set when parsing from an array.");
|
||||
}
|
||||
|
||||
function parseTvShow(array $data, string $posterBasePath): MediaResult {
|
||||
return new MediaResult(
|
||||
function parseTvShow(array $data, string $posterBasePath): TmdbResult {
|
||||
return new TmdbResult(
|
||||
imdbId: $data['external_ids']['imdb_id'],
|
||||
tvdbId: $data['id'],
|
||||
title: $data['name'],
|
||||
@@ -191,8 +192,8 @@ class Client
|
||||
);
|
||||
}
|
||||
|
||||
function parseMovie(array $data, string $posterBasePath): MediaResult {
|
||||
return new MediaResult(
|
||||
function parseMovie(array $data, string $posterBasePath): TmdbResult {
|
||||
return new TmdbResult(
|
||||
imdbId: $data['external_ids']['imdb_id'],
|
||||
tvdbId: $data['id'],
|
||||
title: $data['title'],
|
||||
@@ -209,67 +210,80 @@ class Client
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function parseFromObject($result)
|
||||
private function parseFromObject($result): TmdbResult
|
||||
{
|
||||
$result->mediaType = $result instanceof Movie ? 'movies' : 'tvshows';
|
||||
$mediaType = $result instanceof Movie ? MediaType::Movie->value : MediaType::TvShow->value;
|
||||
$tmdbResult = new TmdbResult();
|
||||
$tmdbResult->mediaType = $mediaType;
|
||||
$tmdbResult->imdbId = $this->getImdbId($result->getId(), $mediaType);
|
||||
$tmdbResult->title = $this->getTitle($result, $mediaType);
|
||||
$tmdbResult->poster = self::POSTER_IMG_PATH . $result->getPosterImage();
|
||||
$tmdbResult->year = $this->getReleaseDate($result, $mediaType);
|
||||
$tmdbResult->description = $result->getOverview();
|
||||
return $tmdbResult;
|
||||
}
|
||||
|
||||
$externalIds = $this->cache->get("tmdb.externalIds.{$result->getId()}", function (ItemInterface $item) use ($result) {
|
||||
if ($result instanceof Movie) {
|
||||
$externalIds = $this->movieRepository->getExternalIds($result->getId());
|
||||
} else {
|
||||
$externalIds = $this->tvRepository->getExternalIds($result->getId());
|
||||
}
|
||||
return $externalIds;
|
||||
public function getImdbId(string $tmdbId, $mediaType)
|
||||
{
|
||||
$externalIds = $this->cache->get("tmdb.externalIds.{$tmdbId}",
|
||||
function (ItemInterface $item) use ($tmdbId, $mediaType) {
|
||||
switch (MediaType::tryFrom($mediaType)->value) {
|
||||
case MediaType::Movie->value:
|
||||
return $this->movieRepository->getExternalIds($tmdbId);
|
||||
case MediaType::TvShow->value:
|
||||
return $this->tvRepository->getExternalIds($tmdbId);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
$images = $this->cache->get("tmdb.images.{$result->getId()}", function (ItemInterface $item) use ($result) {
|
||||
if ($result instanceof Movie) {
|
||||
$images = $this->movieRepository->getImages($result->getId());
|
||||
} else {
|
||||
$images = $this->tvRepository->getImages($result->getId());
|
||||
}
|
||||
return $images;
|
||||
if (null === $externalIds) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $externalIds->getImdbId() !== "" ? $externalIds->getImdbId() : "null";
|
||||
}
|
||||
|
||||
public function getImages($tmdbId, $mediaType)
|
||||
{
|
||||
return $this->cache->get("tmdb.images.{$tmdbId}",
|
||||
function (ItemInterface $item) use ($tmdbId, $mediaType) {
|
||||
switch (MediaType::tryFrom($mediaType)->value) {
|
||||
case MediaType::Movie->value:
|
||||
return $this->movieRepository->getImages($tmdbId);
|
||||
case MediaType::TvShow->value:
|
||||
return $this->tvRepository->getImages($tmdbId);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (null !== $externalIds) {
|
||||
$imdbId = $externalIds->getImdbId() !== "" ? $externalIds->getImdbId() : "null";
|
||||
|
||||
if ("movies" === $result->mediaType) {
|
||||
$result->setImdbId($imdbId);
|
||||
} else {
|
||||
$result->imdbId = $imdbId;
|
||||
$result->title = $result->getName();
|
||||
}
|
||||
} else {
|
||||
if ("movies" === $result->mediaType) {
|
||||
$result->setImdbId("null");
|
||||
} else {
|
||||
$result->imdbId = "null";
|
||||
}
|
||||
private function getReleaseDate($result, $mediaType): string
|
||||
{
|
||||
switch (MediaType::tryFrom($mediaType)->value) {
|
||||
case MediaType::Movie->value:
|
||||
return ($result->getReleaseDate() instanceof \DateTime)
|
||||
? $result->getReleaseDate()->format('Y')
|
||||
: $result->getReleaseDate();
|
||||
case MediaType::TvShow->value:
|
||||
return ($result->getFirstAirDate() instanceof \DateTime)
|
||||
? $result->getFirstAirDate()->format('Y')
|
||||
: $result->getFirstAirDate();
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
if ("movies" === $result->mediaType) {
|
||||
if ($result->getReleaseDate() instanceof \DateTime) {
|
||||
$result->year = $result->getReleaseDate()->format("Y");
|
||||
} else {
|
||||
$result->year = (new \DateTime($result->getReleaseDate()))->format('Y');
|
||||
}
|
||||
} else {
|
||||
if ($result->getFirstAirDate() instanceof \DateTime) {
|
||||
$result->year = $result->getFirstAirDate()->format("Y");
|
||||
} else {
|
||||
$result->year = (new \DateTime($result->getFirstAirDate()))->format('Y');
|
||||
}
|
||||
private function getTitle($result, $mediaType): string
|
||||
{
|
||||
switch (MediaType::tryFrom($mediaType)->value) {
|
||||
case MediaType::Movie->value:
|
||||
return $result->getTitle();
|
||||
case MediaType::TvShow->value:
|
||||
return $result->getName();
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
|
||||
/** @var Movie $result */
|
||||
$result->setExternalIds($externalIds);
|
||||
|
||||
$result->setImages($images);
|
||||
$result->getPosterImage()->setFilePath(
|
||||
self::POSTER_IMG_PATH . $result->getPosterImage()->getFilePath()
|
||||
);
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user