paginatorFactory = $paginatorFactory; $this->remoteCalendarConnector = $remoteCalendarConnector; $this->serializer = $serializer; } /** * @Route("api/1.0/calendar/proxy/calendar/by-user/{id}/events") */ public function listEventForCalendar(User $user, Request $request): Response { if (!$request->query->has('dateFrom')) { throw new BadRequestHttpException('You must provide a dateFrom parameter'); } if (false === $dateFrom = DateTimeImmutable::createFromFormat( DateTimeImmutable::ATOM, $request->query->get('dateFrom') )) { throw new BadRequestHttpException('dateFrom not parsable'); } if (!$request->query->has('dateTo')) { throw new BadRequestHttpException('You must provide a dateTo parameter'); } if (false === $dateTo = DateTimeImmutable::createFromFormat( DateTimeImmutable::ATOM, $request->query->get('dateTo') )) { throw new BadRequestHttpException('dateTo not parsable'); } $events = $this->remoteCalendarConnector->listEventsForUser($user, $dateFrom, $dateTo); $paginator = $this->paginatorFactory->create(count($events)); if (count($events) > 0) { $paginator->setItemsPerPage($paginator->getTotalItems()); } $collection = new Collection($events, $paginator); return new JsonResponse( $this->serializer->serialize($collection, 'json', ['groups' => ['read']]), JsonResponse::HTTP_OK, [], true ); } }