<?php declare(strict_types=1);
namespace App\Controller\V3;
use App\Controller\V1\ResponseTrait;
use App\Helper\SessionHelper;
use App\Repository\LocationRepository;
use App\Repository\MovieFiltersRepository;
use App\Repository\ScheduledMovieRepository;
use FOS\RestBundle\Controller\Annotations as Rest;
use Swagger\Annotations as SWG;
use Nelmio\ApiDocBundle\Annotation\Model;
use Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException;
use Symfony\Component\OptionsResolver\OptionsResolver;
/**
* @Rest\Route("/moviesweb")
* @SWG\Tag(name="MovieWeb_v3")
*/
class MovieWebController extends BaseMovieController
{
/**
* @var SessionHelper
*/
private $sessionHelper;
/**
* @var ScheduledMovieRepository
*/
private $scheduledMovieRepository;
public function __construct(
SessionHelper $sessionHelper,
ScheduledMovieRepository $scheduledMovieRepository,
LocationRepository $locationRepository,
MovieFiltersRepository $movieFiltersRepository
) {
parent::__construct($sessionHelper, $scheduledMovieRepository, $locationRepository, $movieFiltersRepository);
$this->sessionHelper = $sessionHelper;
$this->scheduledMovieRepository = $scheduledMovieRepository;
}
/**
* @Rest\Route("/{id}/sessions", methods={"GET"})
* @Rest\QueryParam(name="filter", map=true, allowBlank=true)
* @Rest\QueryParam(name="order", allowBlank=true)
* @Rest\QueryParam(name="limit", requirements="\d+", allowBlank=true)
* @Rest\QueryParam(name="offset", requirements="\d+", allowBlank=true)
* @Rest\QueryParam(name="location", allowBlank=true)
* @Rest\QueryParam(name="cinema", allowBlank=true)
* @Rest\QueryParam(name="date", allowBlank=true)
* @Rest\View(serializerGroups={"Default", "session_list"})
*
* @SWG\Response(
* response="200",
* description="Get list of sessions by movie id",
* @SWG\Schema(type="array", items=@SWG\Items(ref=@Model(type=\App\Entity\Vista\Session::class))))
*
* @param $id
* @param array $filter
* @param array $order
* @param int $limit
* @param int $offset
* @param null $location
* @param null $cinema
* @param \DateTime|null $date
*
* @return array
* @throws \Exception
*/
public function sessionsAction(
$id,
$filter = [],
$order = [],
$limit = 0,
$offset = 0,
$location = null,
$cinema = null,
?\DateTime $date = null
) {
$filter or $filter = [];
[$filter, $order, $limit, $offset] = $this->prepareInput($filter, $order, $limit, $offset, $location, $cinema, null);
if (isset($filter['date'])) {
unset($filter['date']);
}
$filter['scheduledFilm'] = $this->scheduledMovieRepository->fetchMovieByIdHOFilmCode($id);
if ($date) {
$filter['>=showtime'] = $date->setTime(0, 0, 0);
$filter['<=showtime'] = (clone $date)->add(new \DateInterval('P1D'));
}
$response = $this->prepareSessionsResponse($this->sessionHelper->findBy(
$filter ?: [],
$order ?: null,
$limit ?: null,
$offset ?: null
));
return $this->filterSessionByType($response, 'WWW');
}
}