73 lines
2.9 KiB
PHP
73 lines
2.9 KiB
PHP
<?php namespace MapGuesser\Repository;
|
|
|
|
use Generator;
|
|
use MapGuesser\Database\Query\Select;
|
|
use MapGuesser\PersistentData\Model\Challenge;
|
|
use MapGuesser\PersistentData\Model\Guess;
|
|
use MapGuesser\PersistentData\Model\User;
|
|
use MapGuesser\PersistentData\Model\UserInChallenge;
|
|
use MapGuesser\PersistentData\Model\Place;
|
|
use MapGuesser\PersistentData\PersistentDataManager;
|
|
|
|
class GuessRepository
|
|
{
|
|
private PersistentDataManager $pdm;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->pdm = new PersistentDataManager();
|
|
}
|
|
|
|
public function getAllByUserAndChallenge(User $user, Challenge $challenge) : Generator
|
|
{
|
|
$select = new Select(\Container::$dbConnection);
|
|
$select->innerJoin('place_in_challenge', ['place_in_challenge', 'id'], '=', ['guesses', 'place_in_challenge_id']);
|
|
$select->where('user_id', '=', $user->getId());
|
|
$select->where('challenge_id', '=', $challenge->getId());
|
|
|
|
yield from $this->pdm->selectMultipleFromDb($select, Guess::class);
|
|
}
|
|
|
|
public function getByUserAndPlaceInChallenge(User $user, Challenge $challenge, Place $place) : ?Guess
|
|
{
|
|
$select = new Select(\Container::$dbConnection);
|
|
$select->innerJoin('place_in_challenge', ['place_in_challenge', 'id'], '=', ['guesses', 'place_in_challenge_id']);
|
|
$select->where('user_id', '=', $user->getId());
|
|
$select->where('challenge_id', '=', $challenge->getId());
|
|
$select->where('place_id', '=', $place->getId());
|
|
|
|
return $this->pdm->selectFromDb($select, Guess::class);
|
|
}
|
|
|
|
public function getAllInChallengeByUser(int $userId, Challenge $challenge): Generator
|
|
{
|
|
$select = new Select(\Container::$dbConnection);
|
|
$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('round');
|
|
|
|
yield from $this->pdm->selectMultipleFromDb($select, Guess::class);
|
|
}
|
|
|
|
public function getAllInChallenge(Challenge $challenge): Generator
|
|
{
|
|
$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('round');
|
|
|
|
yield from $this->pdm->selectMultipleFromDb($select, Guess::class, true);
|
|
}
|
|
|
|
public function getAllInChallengeByRound(int $round, Challenge $challenge): Generator
|
|
{
|
|
$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('round', '=', $round);
|
|
|
|
yield from $this->pdm->selectMultipleFromDb($select, Guess::class, true);
|
|
}
|
|
}
|