/**
  * @return int
  */
 protected function totalGames()
 {
     $builder = $this->gameRepository->createQueryBuilder('game');
     $builder->select('COUNT(game.id)');
     $builder->setCacheable(true);
     $query = $builder->getQuery();
     $query->useResultCache(true, 30, 'total_games');
     return $query->getSingleScalarResult();
 }
Example #2
0
 private function create(Player $p1, Player $p2, ParamFetcherInterface $params)
 {
     try {
         if (!in_array((int) $params->get('winner'), [Game::P1WINNER, Game::P2WINNER], true)) {
             throw new \InvalidArgumentException('Winner not correct format');
         }
         if (!in_array((int) $params->get('wintype'), [Game::WINTYPE_NORMAL, Game::WINTYPE_GAMMON, Game::WINTYPE_BACKGAMMON], true)) {
             throw new \InvalidArgumentException('Wintype not correct format');
         }
         list($p1Elo, $p2Elo) = $this->eloCalculator->getNewElo($p1, $p2, $params->get('winner'), $params->get('wintype'));
         $oldp1Elo = $p1->getElo();
         $oldp2Elo = $p2->getElo();
         $p1->setElo($p1Elo);
         $p2->setElo($p2Elo);
         $gameClass = $this->gameRepository->getClassName();
         /** @var Game $game */
         $game = new $gameClass();
         $game->setPlayer1($p1)->setPlayer2($p2)->setWinner($params->get('winner'))->setPlayer1Elochange($oldp1Elo, $p1Elo)->setPlayer2Elochange($oldp2Elo, $p2Elo)->setWintype($params->get('wintype'));
         $params = $params->all();
         if (array_key_exists('date', $params)) {
             $game->setDate($params['date']);
         }
         $this->save($game, false);
         $this->save($p1, false);
         $this->save($p2, true);
         return $game;
     } catch (\Exception $e) {
         throw new \InvalidArgumentException('Unexcepted error (' . $e->getMessage() . ')');
     }
 }
 /**
  * @return Response
  */
 protected function getAvailableGamesAction()
 {
     $newGamesFilter = function (Game $game) {
         return $game->isAvailable();
     };
     $games = $this->gameRepository->findAvailableForUser($this->getUser(), 5)->filter($newGamesFilter);
     $view = $this->view($games);
     /** @var Game $oldestGame */
     $oldestGame = $games->last();
     if ($oldestGame) {
         // if games found, cache expires oldest game + 5 minutes (if searched for games withing last 5 minutes)
         $maxAge = Game::JOIN_LIMIT - (time() - $oldestGame->getTimestamp()->getTimestamp());
         $view->getResponse()->setSharedMaxAge($maxAge);
     }
     return $this->handleView($view);
 }
 public function set(Stats $stats)
 {
     $result = $this->gameRepository->findLeastGamesByPlayer();
     $stat = new Stat('Player with least games', $result['numgames'], $this->playerRepository->find($result['player']));
     $stats->addStat($stat);
 }
 /**
  * @param Player $player
  * @return int
  */
 protected function totalGames(Player $player)
 {
     $builder = $this->gameRepository->findByPlayer($player->getId());
     $builder->select('COUNT(game.id)');
     return $builder->getQuery()->getSingleScalarResult();
 }