feat: new Discover section shows watch providers for results
This commit is contained in:
@@ -2,13 +2,18 @@
|
||||
|
||||
namespace App\Tmdb\Framework\Controller;
|
||||
|
||||
use App\Base\Enum\MediaType;
|
||||
use App\Base\Util\ImdbMatcher;
|
||||
use App\Library\Action\Result\LibrarySearchResult;
|
||||
use App\Tmdb\TmdbClient;
|
||||
use App\Tmdb\TmdbMovieGenre;
|
||||
use App\Tmdb\TmdbResult;
|
||||
use App\Tmdb\TmdbTvShowGenre;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
use Symfony\UX\Turbo\TurboBundle;
|
||||
|
||||
class ApiController extends AbstractController
|
||||
{
|
||||
@@ -47,4 +52,50 @@ class ApiController extends AbstractController
|
||||
'results' => $results,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/api/tmdb/watch-providers/{mediaType}/{tmdbId}', name: 'api.tmdb.watch_providers', methods: ['GET'])]
|
||||
public function watchProviders(string $mediaType, string $tmdbId, Request $request, TmdbClient $tmdb)
|
||||
{
|
||||
$result = $tmdb->watchProviders($tmdbId, $mediaType);
|
||||
if ($request->headers->get('Turbo-Frame')) {
|
||||
return $this->sendFragmentResponse(['providers' => $result], $request);
|
||||
}
|
||||
|
||||
return $this->json($result);
|
||||
}
|
||||
|
||||
#[Route('/api/tmdb/genre/{mediaType}/{genreId}', name: 'api.tmdb.genre', methods: ['GET'])]
|
||||
public function genreResults(string $mediaType, string $genreId, Request $request, TmdbClient $tmdb)
|
||||
{
|
||||
$genre = TmdbMovieGenre::from($genreId);
|
||||
$results['media_type'] = $mediaType;
|
||||
$results['genre'] = $genre->name;
|
||||
$results['genre_id'] = $genre->value;
|
||||
$results['media'] = match($mediaType) {
|
||||
MediaType::Movie->value => $tmdb->discoverMovies(
|
||||
[TmdbMovieGenre::from($genre->value)],
|
||||
),
|
||||
MediaType::TvShow->value => $tmdb->discoverTvShows(
|
||||
[TmdbTvShowGenre::from($genreId)]
|
||||
)
|
||||
};
|
||||
if ($request->headers->get('Turbo-Frame')) {
|
||||
return $this->sendFragmentResponse(['result' => $results], $request);
|
||||
}
|
||||
|
||||
return $this->json($results);
|
||||
}
|
||||
|
||||
private function sendFragmentResponse(mixed $result, Request $request): Response
|
||||
{
|
||||
$request->setRequestFormat(TurboBundle::STREAM_FORMAT);
|
||||
return $this->renderBlock(
|
||||
'discover/fragments.html.twig',
|
||||
$request->query->get('block'),
|
||||
[
|
||||
'result' => $result,
|
||||
'target' => $request->query->get('target')
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user