<?php declare(strict_types=1);
namespace App\Controller\V2;
use Nelmio\ApiDocBundle\Annotation\Model;
use FOS\RestBundle\Controller\Annotations as Rest;
use Swagger\Annotations as SWG;
use Symfony\Component\HttpFoundation\Request;
/**
* @Rest\Route("/moviesweb")
* @SWG\Tag(name="MovieWeb_v2")
*/
class MovieWebController extends BaseMovieController
{
/**
* @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 Request $request
* @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(
Request $request,
$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 ('mobile' === $request->attributes->get('_platform')) {
if ($date) {
$filter['>=showtime'] = $date->setTime(0, 0, 0);
$filter['<=showtime'] = (clone $date)->add(new \DateInterval('P1D'));
}
} else {
$date or $date = $this->sessionHelper->getDefaultDate();
is_string($date) and $date = \DateTime::createFromFormat('Y-m-d', $date);
if ($date) {
$filter['>=showtime'] = $date;
$filter['<=showtime'] = (clone $date)
->setTime(0, 0, 0)
->add(new \DateInterval('P1D'));
}
}
$response = $this->prepareSessionsResponse($this->sessionHelper->findBy(
$filter ?: [],
$order ?: null,
$limit ?: null,
$offset ?: null
));
return $this->filterSessionByType($response, 'WWW');
}
}