Esempio n. 1
0
 /**
  * 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;
 }