/** * Gets quotes by their symbols * * @param $symbols array|string * @return Stock[] */ public function getStock($symbols) { if (is_string($symbols)) { $symbols = [$symbols]; } /** @var Stock[] $storedStocks */ $storedStocks = $this->em->getRepository('AppBundle:Stock')->findBySymbol($symbols); $resultStocks = $stocksToUpdate = $quotes = []; foreach ($symbols as $symbol) { if (isset($storedStocks[$symbol])) { $stock = $storedStocks[$symbol]; $totalTime = $stock->getLastUpdate()->modify($this->ttl); if ($totalTime < new \DateTime()) { $stocksToUpdate[] = $symbol; } else { $resultStocks[] = $stock; } } else { $stocksToUpdate[] = $symbol; } } if ($stocksToUpdate) { $quotes = $this->api->getQuotes($stocksToUpdate); } if ($quotes) { foreach ($quotes as $quote) { $quoteSymbol = strtoupper($quote['Symbol']); if (isset($storedStocks[$quoteSymbol])) { $stock = $storedStocks[$quoteSymbol]; $stock->setChangeInPercent($quote['ChangeinPercent'])->setLastTradePrice($quote['LastTradePriceOnly'])->setLastUpdate(new \DateTime()); $resultStocks[] = $stock; } else { $stock = new Stock(); $stock->setSymbol($quoteSymbol)->setCompanyName($quote['Name'])->setChangeInPercent($quote['ChangeinPercent'])->setLastTradePrice($quote['LastTradePriceOnly'])->setStockExchange($quote['StockExchange']); $this->em->persist($stock); $resultStocks[] = $stock; } } $this->em->flush(); } return $resultStocks; }