getStation(); $tz = $station->getTimezoneObject(); $queryParams = $request->getQueryParams(); if (isset($queryParams['start'])) { $dateRange = $this->getScheduleDateRange($request); $cacheKey = 'api_station_' . $station->getId() . '_schedule_' . $dateRange->getStart()->format('Ymd') . '-' . $dateRange->getEnd()->format('Ymd'); $cacheItem = $this->psr6Cache->getItem($cacheKey); if (!$cacheItem->isHit()) { $nowTz = CarbonImmutable::now($station->getTimezoneObject()); $events = $this->scheduleRepo->getAllScheduledItemsForStation($station); $cacheItem->set( $this->getEvents( $dateRange, $nowTz, $this->scheduler, $events, [$this->scheduleApiGenerator, '__invoke'] ) ); $cacheItem->expiresAfter(600); $this->psr6Cache->saveDeferred($cacheItem); } $events = $cacheItem->get(); } else { if (!empty($queryParams['now'])) { $now = CarbonImmutable::parse($queryParams['now'], $tz); $cacheKey = 'api_station_' . $station->getId() . '_schedule_' . $now->format('Ymd_gia'); } else { $now = CarbonImmutable::now($tz); $cacheKey = 'api_station_' . $station->getId() . '_schedule_upcoming'; } $cacheItem = $this->psr6Cache->getItem($cacheKey); if (!$cacheItem->isHit()) { $cacheItem->set($this->scheduleRepo->getUpcomingSchedule($station, $now)); $cacheItem->expiresAfter(60); $this->psr6Cache->saveDeferred($cacheItem); } $events = $cacheItem->get(); $rows = (int)$request->getQueryParam('rows', 5); $events = array_slice($events, 0, $rows); } return $response->withJson($events); } }