src/Controller/V1/SessionController.php line 77

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Controller\V1;
  4. use App\Entity\Vista\LoyaltyMember;
  5. use App\Manager\SessionDetailsManager;
  6. use App\Helper\SessionHelper;
  7. use App\Helper\UserHelper;
  8. use App\Repository\LocationRepository;
  9. use FOS\RestBundle\Controller\Annotations as Rest;
  10. use FOS\RestBundle\Controller\Annotations\View;
  11. use Nelmio\ApiDocBundle\Annotation\Model;
  12. use Swagger\Annotations as SWG;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use App\Security\Security;
  15. /**
  16.  * @Route("/sessions")
  17.  * @SWG\Tag(name="Session_v1")
  18.  */
  19. class SessionController
  20. {
  21.     use ResponseTrait;
  22.     /**
  23.      * @var SessionHelper
  24.      */
  25.     protected $sessionHelper;
  26.     /**
  27.      * @var LocationRepository
  28.      */
  29.     protected $locationRepository;
  30.     /**
  31.      * @var SessionDetailsManager
  32.      */
  33.     protected $sessionDetailsHelper;
  34.     /**
  35.      * @var UserHelper
  36.      */
  37.     protected $userHelper;
  38.     public function __construct(
  39.         SessionHelper $sessionHelper,
  40.         LocationRepository $locationRepository,
  41.         SessionDetailsManager $sessionDetailsHelper,
  42.         UserHelper $userHelper
  43.     ) {
  44.         $this->sessionHelper $sessionHelper;
  45.         $this->locationRepository $locationRepository;
  46.         $this->sessionDetailsHelper $sessionDetailsHelper;
  47.         $this->userHelper $userHelper;
  48.     }
  49.     /**
  50.      * @Route("/{id}", methods={"GET"})
  51.      * @View(serializerGroups={"Default", "session_details"})
  52.      *
  53.      * @SWG\Response(
  54.      *     response=200,
  55.      *     description="A movie",
  56.      *     @Model(type=\App\Entity\Local\Response\SessionDetails::class))
  57.      *
  58.      * @param $id
  59.      * @param Security $security
  60.      * @return \App\Entity\Local\Response\SessionDetails
  61.      * @throws \Throwable
  62.      */
  63.     public function showSession($idSecurity $security)
  64.     {
  65.         /** @var LoyaltyMember $user */
  66.         $user $security->getUser();
  67.         if (null === $user) {
  68.             return $this->sessionDetailsHelper->getDetails($id);
  69.         }
  70.         $user $this->userHelper->validate($user);
  71.         $balance $this->userHelper->getBalance($user);
  72.         return $this->sessionDetailsHelper->getDetailsForUser($id$user$balance);
  73.     }
  74.     /**
  75.      * @Route("/filters/dates/list", methods={"GET"})
  76.      * @Rest\QueryParam(name="cinemaId", requirements="\d+", allowBlank=true, strict=true, nullable=true)
  77.      * @Rest\QueryParam(name="corporateFilmId", allowBlank=true, strict=true, nullable=true)
  78.      * @Rest\QueryParam(name="location", allowBlank=true, nullable=true)
  79.      * @Rest\QueryParam(name="top", allowBlank=true, strict=true, nullable=true)
  80.      * @Rest\QueryParam(name="comingSoon", allowBlank=true, strict=true, nullable=true)
  81.      * @View()
  82.      *
  83.      * @SWG\Response(
  84.      *     response="200",
  85.      *     description="Success",
  86.      *     @SWG\Schema(type="array", items=@SWG\Items(type="string")))
  87.      *
  88.      * @param string $cinemaId
  89.      * @param string $corporateFilmId
  90.      * @param int    $location
  91.      * @param bool   $top
  92.      * @param bool   $comingSoon
  93.      *
  94.      * @return array
  95.      */
  96.     public function filtersDatesListAction(
  97.         ?string $cinemaId,
  98.         ?string $corporateFilmId,
  99.         $location null,
  100.         ?bool $top null,
  101.         ?bool $comingSoon null
  102.     ) {
  103.         if (!is_numeric($location)) {
  104.             $location null;
  105.         } else {
  106.             $location = (int) $location;
  107.         }
  108.         return $this->sessionHelper->getFiltersDatesList(
  109.             $corporateFilmId,
  110.             $cinemaId ? [$cinemaId] : null,
  111.             $location,
  112.             $top,
  113.             $comingSoon
  114.         );
  115.     }
  116. }