episodeActionRepository = $episodeActionRepository; $this->userId = $UserId; $this->episodeActionSaver = $episodeActionSaver; $this->request = $request; } /** * * @NoAdminRequired * @NoCSRFRequired * * @return JSONResponse */ public function create(): JSONResponse { $episodeActionsArray = $this->filterEpisodesFromRequestParams($this->request->getParams()); $this->episodeActionSaver->saveEpisodeActions($episodeActionsArray, $this->userId); return new JSONResponse(["timestamp" => time()]); } /** * * @NoAdminRequired * @NoCSRFRequired * * @param int $since * @return JSONResponse */ public function list(int $since): JSONResponse { $episodeActions = $this->episodeActionRepository->findAll($since, $this->userId); $untypedEpisodeActionData = []; foreach ($episodeActions as $episodeAction) { $untypedEpisodeActionData[] = $episodeAction->toArray(); } return new JSONResponse([ "actions" => $untypedEpisodeActionData, "timestamp" => time() ]); } /** * @param array $requestParams * * @return array $episodeActionsArray */ public function filterEpisodesFromRequestParams(array $data): array { return array_filter($data, "is_numeric", ARRAY_FILTER_USE_KEY); } /** * @param int|null $since * * @return DateTime */ private function createDateTimeFromTimestamp(?int $since): DateTime { return ($since !== null) ? (new \DateTime)->setTimestamp($since) : (new \DateTime('-1 week')); } }