private function placeVote($sessionId, $memberId, $voteValue)
 {
     // Fetch entities
     $session = $this->getSession($sessionId);
     $currentPoll = $session->getCurrentPoll();
     $member = $this->getMember($memberId);
     // Reject votes if poll is completed
     if ($currentPoll != null && $currentPoll->getResult() > 0) {
         throw new Exception("Can not vote on completed polls!");
     }
     // Find or create vote
     foreach ($currentPoll->getVotes() as $vote) {
         if ($vote->getMember() == $member) {
             $match = $vote;
         }
     }
     // Create vote if not found
     if (!isset($match)) {
         $match = new Vote();
         $match->setPoll($currentPoll);
         $match->setMember($member);
     }
     // Set value
     $match->setValue($voteValue);
     // Evaluate the poll
     $this->evaluatePoll($session, $currentPoll);
     if ($currentPoll->getResult() > 0) {
         $this->highlightVotes($currentPoll);
     }
     // Save all to db
     $this->saveAll([$match, $currentPoll]);
     $this->saveAll($currentPoll->getVotes()->toArray());
 }
 private function placeVote($sessionId, $memberId, $voteValue)
 {
     // Fetch entities
     $session = $this->getSession($sessionId);
     $currentPoll = $session->getCurrentPoll();
     $member = $this->getMember($memberId);
     // Find or create vote
     foreach ($currentPoll->getVotes() as $vote) {
         if ($vote->getMember() == $member) {
             $match = $vote;
         }
     }
     // Create vote if not found
     if (!isset($match)) {
         $match = new Vote();
         $match->setPoll($currentPoll);
         $match->setMember($member);
     }
     // Set value
     $match->setValue($voteValue);
     // Evaluate current poll
     $this->evaluatePoll($session, $currentPoll);
     // Save all to db
     $this->saveAll([$match, $currentPoll]);
 }