diff --git a/src/Command/FetchTweetsCommand.php b/src/Command/FetchTweetsCommand.php index e846647..7d57432 100644 --- a/src/Command/FetchTweetsCommand.php +++ b/src/Command/FetchTweetsCommand.php @@ -4,12 +4,10 @@ namespace App\Command; use App\Entity\Tweet; use App\Service\TweetFetcher; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Style\SymfonyStyle; class FetchTweetsCommand extends Command { @@ -20,11 +18,17 @@ class FetchTweetsCommand extends Command */ private $tweetFetcher; - public function __construct(TweetFetcher $tweetFetcher) + /** + * @var \Doctrine\ORM\EntityManagerInterface + */ + private $entityManager; + + public function __construct(TweetFetcher $tweetFetcher, EntityManagerInterface $entityManager) { parent::__construct(); $this->tweetFetcher = $tweetFetcher; + $this->entityManager = $entityManager; } protected function configure() @@ -36,18 +40,10 @@ class FetchTweetsCommand extends Command protected function execute(InputInterface $input, OutputInterface $output) { - $io = new SymfonyStyle($input, $output); + $this->tweetFetcher->getTweets()->each(function (Tweet $tweet) { + $this->entityManager->persist($tweet); + }); - $io->table( - ['Tweet', 'Author', 'Created', 'ID'], - $this->tweetFetcher->getTweets()->map(function (Tweet $tweet) { - return [ - $tweet->getText(), - $tweet->getAuthor(), - $tweet->getCreated(), - $tweet->getId(), - ]; - })->all() - ); + $this->entityManager->flush(); } } diff --git a/src/Service/TweetFetcher.php b/src/Service/TweetFetcher.php index 78fa9af..0838853 100644 --- a/src/Service/TweetFetcher.php +++ b/src/Service/TweetFetcher.php @@ -3,7 +3,7 @@ namespace App\Service; use App\Entity\Tweet; -use Doctrine\ORM\EntityManagerInterface; +use App\Repository\TweetRepository; use Tightenco\Collect\Support\Collection; class TweetFetcher @@ -30,28 +30,30 @@ class TweetFetcher ]; /** - * @var \Doctrine\ORM\EntityManagerInterface + * @var \App\Repository\TweetRepository */ - private $entityManager; + private $tweetRepository; - public function __construct(Codebird $codebird, EntityManagerInterface $entityManager) + public function __construct(Codebird $codebird, TweetRepository $tweetRepository) { $this->codebird = $codebird; - $this->entityManager = $entityManager; + $this->tweetRepository = $tweetRepository; } public function getTweets(): Collection { + $latestTweet = $this->tweetRepository->findNewestTweet(); + $response = collect($this->codebird->get()->search_tweets([ 'q' => collect($this->params()->all())->implode(' AND '), - // 'since_id' => $this->lastTweetId, + 'since_id' => $latestTweet ? $latestTweet->getId() : null, ])); if ($response->get('httpstatus') != 200) { dump($response); } - $tweets = collect($response->get('statuses')) + return collect($response->get('statuses')) ->map(function (\stdClass $status) { return tap(new Tweet(), function (Tweet $tweet) use ($status) { $tweet->setId($status->id); @@ -62,10 +64,6 @@ class TweetFetcher $this->entityManager->persist($tweet); }); })->reverse(); - - $this->entityManager->flush(); - - return $tweets; } private function params(): Collection