em = $em; $this->userRepository = $userRepository; $this->import = $import; $this->eventDispatcher = $eventDispatcher; $this->logger = $logger ?: new NullLogger(); } /** * Handle a message and save it. * * @param string $body Message from the queue (in json) * * @return bool */ protected function handleMessage($body) { $storedEntry = json_decode($body, true); $user = $this->userRepository->find($storedEntry['userId']); // no user? Drop message if (null === $user) { $this->logger->warning('Unable to retrieve user', ['entry' => $storedEntry]); return false; } $this->import->setUser($user); $entry = $this->import->parseEntry($storedEntry); if (null === $entry) { $this->logger->warning('Entry already exists', ['entry' => $storedEntry]); // return true to skip message return true; } try { $this->em->flush(); // entry saved, dispatch event about it! $this->eventDispatcher->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry)); // clear only affected entities $this->em->clear(Entry::class); $this->em->clear(Tag::class); } catch (\Exception $e) { $this->logger->warning('Unable to save entry', ['entry' => $storedEntry, 'exception' => $e]); return false; } $this->logger->info('Content with url imported! ('.$entry->getUrl().')'); return true; } }