feature/MAPG-235-basic-challenge-mode #48
@ -1,7 +1,7 @@
 | 
			
		||||
CREATE TABLE `challenges` (
 | 
			
		||||
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 | 
			
		||||
  `token` int(10) unsigned NOT NULL,
 | 
			
		||||
  `timer_sec` int(10) unsigned,
 | 
			
		||||
  `time_limit` int(10) unsigned,
 | 
			
		||||
  `no_move` tinyint(1) NOT NULL DEFAULT 0,
 | 
			
		||||
  `no_pan` tinyint(1) NOT NULL DEFAULT 0,
 | 
			
		||||
  `no_zoom` tinyint(1) NOT NULL DEFAULT 0,
 | 
			
		||||
@ -13,7 +13,7 @@ CREATE TABLE `user_in_challenge` (
 | 
			
		||||
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 | 
			
		||||
  `user_id` int(10) unsigned NOT NULL,
 | 
			
		||||
  `challenge_id` int(10) unsigned NOT NULL,
 | 
			
		||||
  `round` smallint(5) signed NOT NULL DEFAULT 0,
 | 
			
		||||
  `current_round` smallint(5) signed NOT NULL DEFAULT 0,
 | 
			
		||||
  `time_left` int(10) unsigned,
 | 
			
		||||
  `is_owner` tinyint(1) NOT NULL DEFAULT 0,
 | 
			
		||||
  PRIMARY KEY (`id`),
 | 
			
		||||
@ -27,13 +27,13 @@ CREATE TABLE `place_in_challenge` (
 | 
			
		||||
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 | 
			
		||||
  `place_id` int(10) unsigned NOT NULL,
 | 
			
		||||
  `challenge_id` int(10) unsigned NOT NULL,
 | 
			
		||||
  `order` smallint(5) unsigned NOT NULL,
 | 
			
		||||
  `round` smallint(5) unsigned NOT NULL,
 | 
			
		||||
  PRIMARY KEY (`id`),
 | 
			
		||||
  KEY `place_id` (`place_id`),
 | 
			
		||||
  KEY `challenge_id` (`challenge_id`),
 | 
			
		||||
  CONSTRAINT `place_in_challenge_place_id` FOREIGN KEY (`place_id`) REFERENCES `places` (`id`),
 | 
			
		||||
  CONSTRAINT `place_in_challenge_challenge_id` FOREIGN KEY (`challenge_id`) REFERENCES `challenges` (`id`),
 | 
			
		||||
  CONSTRAINT `unique_order_in_challenge` UNIQUE (`order`, `challenge_id`)
 | 
			
		||||
  CONSTRAINT `unique_order_in_challenge` UNIQUE (`round`, `challenge_id`)
 | 
			
		||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
 | 
			
		||||
 | 
			
		||||
CREATE TABLE `guesses` (
 | 
			
		||||
 | 
			
		||||
@ -113,7 +113,7 @@ class GameController
 | 
			
		||||
        $challenge->setCreatedDate(new DateTime());
 | 
			
		||||
        
 | 
			
		||||
        if($this->request->post('timerEnabled') !== null && $this->request->post('timeLimit') !== null) {
 | 
			
		||||
            $challenge->setTimerSec($this->request->post('timeLimit'));
 | 
			
		||||
            $challenge->setTimeLimit($this->request->post('timeLimit'));
 | 
			
		||||
        }
 | 
			
		||||
        if($this->request->post('noMove') !== null) {
 | 
			
		||||
            $challenge->setNoMove(true);
 | 
			
		||||
@ -135,7 +135,7 @@ class GameController
 | 
			
		||||
        $userInChallenge = new UserInChallenge();
 | 
			
		||||
        $userInChallenge->setUserId($userId);
 | 
			
		||||
        $userInChallenge->setChallenge($challenge);
 | 
			
		||||
        $userInChallenge->setTimeLeft($challenge->getTimerSec());
 | 
			
		||||
        $userInChallenge->setTimeLeft($challenge->getTimeLimit());
 | 
			
		||||
        $userInChallenge->setIsOwner(true);
 | 
			
		||||
 | 
			
		||||
        $this->pdm->saveToDb($userInChallenge);
 | 
			
		||||
@ -147,12 +147,12 @@ class GameController
 | 
			
		||||
 | 
			
		||||
        $places = $this->placeRepository->getRandomNPlaces($mapId, static::NUMBER_OF_ROUNDS, $userId);
 | 
			
		||||
 | 
			
		||||
        $order = 1;
 | 
			
		||||
        $round = 0;
 | 
			
		||||
        foreach ($places as $place) {
 | 
			
		||||
            $placeInChallenge = new PlaceInChallenge();
 | 
			
		||||
            $placeInChallenge->setPlace($place);
 | 
			
		||||
            $placeInChallenge->setChallenge($challenge);
 | 
			
		||||
            $placeInChallenge->setOrder($order++);
 | 
			
		||||
            $placeInChallenge->setRound($round++);
 | 
			
		||||
            $this->pdm->saveToDb($placeInChallenge);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -246,7 +246,7 @@ class GameController
 | 
			
		||||
            $userInChallenge = new UserInChallenge();
 | 
			
		||||
            $userInChallenge->setUserId($userId);
 | 
			
		||||
            $userInChallenge->setChallenge($challenge);
 | 
			
		||||
            $userInChallenge->setTimeLeft($challenge->getTimerSec());
 | 
			
		||||
            $userInChallenge->setTimeLeft($challenge->getTimeLimit());
 | 
			
		||||
            $this->pdm->saveToDb($userInChallenge);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -153,7 +153,7 @@ class GameFlowController
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $challenge = $userInChallenge->getChallenge();
 | 
			
		||||
        $currentRound = $userInChallenge->getRound();
 | 
			
		||||
        $currentRound = $userInChallenge->getCurrentRound();
 | 
			
		||||
        $currentPlace = $this->placeRepository->getByRoundInChallenge($challenge, $currentRound);
 | 
			
		||||
 | 
			
		||||
        $response = [];
 | 
			
		||||
@ -316,7 +316,7 @@ class GameFlowController
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $challenge = $userInChallenge->getChallenge();
 | 
			
		||||
        $currentRound = $userInChallenge->getRound();
 | 
			
		||||
        $currentRound = $userInChallenge->getCurrentRound();
 | 
			
		||||
        $currentPlace = $this->placeRepository->getByRoundInChallenge($challenge, $currentRound);
 | 
			
		||||
        $map = $this->mapRepository->getByPlace($currentPlace);
 | 
			
		||||
        $placeInChallenge = $this->placeInChallengeRepository->getByPlaceAndChallenge($currentPlace, $challenge);
 | 
			
		||||
@ -355,7 +355,7 @@ class GameFlowController
 | 
			
		||||
        // update round
 | 
			
		||||
        $nextRound = $currentRound + 1;
 | 
			
		||||
 | 
			
		||||
        $userInChallenge->setRound($nextRound);
 | 
			
		||||
        $userInChallenge->setCurrentRound($nextRound);
 | 
			
		||||
        $this->pdm->saveToDb($userInChallenge);
 | 
			
		||||
 | 
			
		||||
        if ($nextRound < static::NUMBER_OF_ROUNDS) {
 | 
			
		||||
 | 
			
		||||
@ -6,13 +6,13 @@ class Challenge extends Model
 | 
			
		||||
{
 | 
			
		||||
    protected static string $table = 'challenges';
 | 
			
		||||
 | 
			
		||||
    protected static array $fields = ['token', 'timer_sec', 'no_move', 'no_pan', 'no_zoom', 'created'];
 | 
			
		||||
    protected static array $fields = ['token', 'time_limit', 'no_move', 'no_pan', 'no_zoom', 'created'];
 | 
			
		||||
 | 
			
		||||
    protected static array $relations = [];
 | 
			
		||||
 | 
			
		||||
    private int $token;
 | 
			
		||||
 | 
			
		||||
    private ?int $timerSec = null;
 | 
			
		||||
    private ?int $timeLimit = null;
 | 
			
		||||
 | 
			
		||||
    private bool $noMove = false;
 | 
			
		||||
 | 
			
		||||
@ -27,10 +27,10 @@ class Challenge extends Model
 | 
			
		||||
        $this->token = $token;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setTimerSec(?int $timerSec): void
 | 
			
		||||
    public function setTimeLimit(?int $timeLimit): void
 | 
			
		||||
    {
 | 
			
		||||
        if(isset($timerSec)) {
 | 
			
		||||
            $this->timerSec = $timerSec;
 | 
			
		||||
        if(isset($timeLimit)) {
 | 
			
		||||
            $this->timeLimit = $timeLimit;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -64,9 +64,9 @@ class Challenge extends Model
 | 
			
		||||
        return $this->token;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTimerSec(): ?int
 | 
			
		||||
    public function getTimeLimit(): ?int
 | 
			
		||||
    {
 | 
			
		||||
        return $this->timerSec;
 | 
			
		||||
        return $this->timeLimit;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNoMove(): bool
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@ class PlaceInChallenge extends Model
 | 
			
		||||
{
 | 
			
		||||
    protected static string $table = 'place_in_challenge';
 | 
			
		||||
 | 
			
		||||
    protected static array $fields = ['place_id', 'challenge_id', 'order'];
 | 
			
		||||
    protected static array $fields = ['place_id', 'challenge_id', 'round'];
 | 
			
		||||
 | 
			
		||||
    protected static array $relations = ['place' => Place::class, 'challenge' => Challenge::class];
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,7 @@ class PlaceInChallenge extends Model
 | 
			
		||||
 | 
			
		||||
    private ?int $challengeId = null;
 | 
			
		||||
 | 
			
		||||
    private int $order;
 | 
			
		||||
    private int $round;
 | 
			
		||||
 | 
			
		||||
    public function setPlace(Place $place): void
 | 
			
		||||
    {
 | 
			
		||||
@ -38,9 +38,9 @@ class PlaceInChallenge extends Model
 | 
			
		||||
        $this->challengeId = $challengeId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setOrder(int $order): void
 | 
			
		||||
    public function setRound(int $round): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->order = $order;
 | 
			
		||||
        $this->round = $round;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getPlace(): ?Place
 | 
			
		||||
@ -63,8 +63,8 @@ class PlaceInChallenge extends Model
 | 
			
		||||
        return $this->challengeId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getOrder(): int
 | 
			
		||||
    public function getRound(): int
 | 
			
		||||
    {
 | 
			
		||||
        return $this->order;
 | 
			
		||||
        return $this->round;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@ class UserInChallenge extends Model
 | 
			
		||||
{
 | 
			
		||||
    protected static string $table = 'user_in_challenge';
 | 
			
		||||
 | 
			
		||||
    protected static array $fields = ['user_id', 'challenge_id', 'round', 'time_left', 'is_owner'];
 | 
			
		||||
    protected static array $fields = ['user_id', 'challenge_id', 'current_round', 'time_left', 'is_owner'];
 | 
			
		||||
 | 
			
		||||
    protected static array $relations = ['user' => User::class, 'challenge' => Challenge::class];
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,7 @@ class UserInChallenge extends Model
 | 
			
		||||
 | 
			
		||||
    private ?int $challengeId = null;
 | 
			
		||||
 | 
			
		||||
    private int $round = 0;
 | 
			
		||||
    private int $currentRound = 0;
 | 
			
		||||
 | 
			
		||||
    private ?int $timeLeft = null;
 | 
			
		||||
 | 
			
		||||
@ -42,9 +42,9 @@ class UserInChallenge extends Model
 | 
			
		||||
        $this->challengeId = $challengeId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setRound(int $round): void
 | 
			
		||||
    public function setCurrentRound(int $currentRound): void
 | 
			
		||||
    {
 | 
			
		||||
        $this->round = $round;
 | 
			
		||||
        $this->currentRound = $currentRound;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function setTimeLeft(?int $timeLeft): void
 | 
			
		||||
@ -79,9 +79,9 @@ class UserInChallenge extends Model
 | 
			
		||||
        return $this->challengeId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getRound(): int
 | 
			
		||||
    public function getCurrentRound(): int
 | 
			
		||||
    {
 | 
			
		||||
        return $this->round;
 | 
			
		||||
        return $this->currentRound;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTimeLeft(): ?int
 | 
			
		||||
 | 
			
		||||
@ -45,7 +45,7 @@ class GuessRepository
 | 
			
		||||
        $select->innerJoin('place_in_challenge', ['place_in_challenge', 'id'], '=', ['guesses', 'place_in_challenge_id']);
 | 
			
		||||
        $select->where('user_id', '=', $userId);
 | 
			
		||||
        $select->where('challenge_id', '=', $challenge->getId());
 | 
			
		||||
        $select->orderBy('order');
 | 
			
		||||
        $select->orderBy('round');
 | 
			
		||||
 | 
			
		||||
        yield from $this->pdm->selectMultipleFromDb($select, Guess::class);
 | 
			
		||||
    }
 | 
			
		||||
@ -55,19 +55,17 @@ class GuessRepository
 | 
			
		||||
        $select = new Select(\Container::$dbConnection);
 | 
			
		||||
        // $select->innerJoin('place_in_challenge', ['guesses', 'place_in_challenge_id'], '=', ['place_in_challenge', 'id']);
 | 
			
		||||
        $select->where('challenge_id', '=', $challenge->getId());
 | 
			
		||||
        $select->orderBy('order');
 | 
			
		||||
        $select->orderBy('round');
 | 
			
		||||
 | 
			
		||||
        yield from $this->pdm->selectMultipleFromDb($select, Guess::class, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getAllInChallengeByRound(int $round, Challenge $challenge): Generator
 | 
			
		||||
    {
 | 
			
		||||
        $order = $round + 1;
 | 
			
		||||
 | 
			
		||||
        $select = new Select(\Container::$dbConnection);
 | 
			
		||||
        $select->innerJoin('place_in_challenge', ['guesses', 'place_in_challenge_id'], '=', ['place_in_challenge', 'id']);
 | 
			
		||||
        $select->where('challenge_id', '=', $challenge->getId());
 | 
			
		||||
        $select->where('order', '=', $order);
 | 
			
		||||
        $select->where('round', '=', $round);
 | 
			
		||||
 | 
			
		||||
        yield from $this->pdm->selectMultipleFromDb($select, Guess::class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -183,7 +183,7 @@ class PlaceRepository
 | 
			
		||||
        $select = new Select(\Container::$dbConnection);
 | 
			
		||||
        $select->innerJoin('place_in_challenge', ['places', 'id'], '=', ['place_in_challenge', 'place_id']);
 | 
			
		||||
        $select->where('challenge_id', '=', $challenge->getId());
 | 
			
		||||
        $select->orderBy('order');
 | 
			
		||||
        $select->orderBy('round');
 | 
			
		||||
        $select->limit(1, $round);
 | 
			
		||||
 | 
			
		||||
        return $this->pdm->selectFromDb($select, Place::class);
 | 
			
		||||
@ -194,7 +194,7 @@ class PlaceRepository
 | 
			
		||||
        $select = new Select(\Container::$dbConnection);
 | 
			
		||||
        $select->innerJoin('place_in_challenge', ['places', 'id'], '=', ['place_in_challenge', 'place_id']);
 | 
			
		||||
        $select->where('challenge_id', '=', $challenge->getId());
 | 
			
		||||
        $select->orderBy('order');
 | 
			
		||||
        $select->orderBy('round');
 | 
			
		||||
 | 
			
		||||
        yield from $this->pdm->selectMultipleFromDb($select, Place::class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user