src/Controller/V3/MovieWebController.php line 20

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace App\Controller\V3;
  3. use App\Controller\V1\ResponseTrait;
  4. use App\Helper\SessionHelper;
  5. use App\Repository\LocationRepository;
  6. use App\Repository\MovieFiltersRepository;
  7. use App\Repository\ScheduledMovieRepository;
  8. use FOS\RestBundle\Controller\Annotations as Rest;
  9. use Swagger\Annotations as SWG;
  10. use Nelmio\ApiDocBundle\Annotation\Model;
  11. use Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException;
  12. use Symfony\Component\OptionsResolver\OptionsResolver;
  13. /**
  14.  * @Rest\Route("/moviesweb")
  15.  * @SWG\Tag(name="MovieWeb_v3")
  16.  */
  17. class MovieWebController extends BaseMovieController
  18. {
  19.     /**
  20.      * @var SessionHelper
  21.      */
  22.     private $sessionHelper;
  23.     /**
  24.      * @var ScheduledMovieRepository
  25.      */
  26.     private $scheduledMovieRepository;
  27.     public function __construct(
  28.         SessionHelper $sessionHelper,
  29.         ScheduledMovieRepository $scheduledMovieRepository,
  30.         LocationRepository $locationRepository,
  31.         MovieFiltersRepository $movieFiltersRepository
  32.     ) {
  33.         parent::__construct($sessionHelper$scheduledMovieRepository$locationRepository$movieFiltersRepository);
  34.         $this->sessionHelper $sessionHelper;
  35.         $this->scheduledMovieRepository $scheduledMovieRepository;
  36.     }
  37.     /**
  38.      * @Rest\Route("/{id}/sessions", methods={"GET"})
  39.      * @Rest\QueryParam(name="filter", map=true, allowBlank=true)
  40.      * @Rest\QueryParam(name="order", allowBlank=true)
  41.      * @Rest\QueryParam(name="limit", requirements="\d+", allowBlank=true)
  42.      * @Rest\QueryParam(name="offset", requirements="\d+", allowBlank=true)
  43.      * @Rest\QueryParam(name="location", allowBlank=true)
  44.      * @Rest\QueryParam(name="cinema", allowBlank=true)
  45.      * @Rest\QueryParam(name="date", allowBlank=true)
  46.      * @Rest\View(serializerGroups={"Default", "session_list"})
  47.      *
  48.      * @SWG\Response(
  49.      *     response="200",
  50.      *     description="Get list of sessions by movie id",
  51.      *         @SWG\Schema(type="array", items=@SWG\Items(ref=@Model(type=\App\Entity\Vista\Session::class))))
  52.      *
  53.      * @param                $id
  54.      * @param array          $filter
  55.      * @param array          $order
  56.      * @param int            $limit
  57.      * @param int            $offset
  58.      * @param null           $location
  59.      * @param null           $cinema
  60.      * @param \DateTime|null $date
  61.      *
  62.      * @return array
  63.      * @throws \Exception
  64.      */
  65.     public function sessionsAction(
  66.         $id,
  67.         $filter = [],
  68.         $order = [],
  69.         $limit 0,
  70.         $offset 0,
  71.         $location null,
  72.         $cinema null,
  73.         ?\DateTime $date null
  74.     ) {
  75.         $filter or $filter = [];
  76.         [$filter$order$limit$offset] = $this->prepareInput($filter$order$limit$offset$location$cinemanull);
  77.         if (isset($filter['date'])) {
  78.             unset($filter['date']);
  79.         }
  80.         $filter['scheduledFilm'] = $this->scheduledMovieRepository->fetchMovieByIdHOFilmCode($id);
  81.         if ($date) {
  82.             $filter['>=showtime'] = $date->setTime(000);
  83.             $filter['<=showtime'] = (clone $date)->add(new \DateInterval('P1D'));
  84.         }
  85.         $response $this->prepareSessionsResponse($this->sessionHelper->findBy(
  86.             $filter ?: [],
  87.             $order ?: null,
  88.             $limit ?: null,
  89.             $offset ?: null
  90.         ));
  91.         return $this->filterSessionByType($response'WWW');
  92.     }
  93. }