api.emotionhero.com/src/Models/GameRepository.php

60 lines
1.7 KiB
PHP

<?php
namespace EmotionHero\Models;
use Doctrine\ORM\EntityRepository;
use EmotionHero\Tools\Position;
class GameRepository extends EntityRepository
{
public function getPositionForGame(Game $game) {
$query = $this->_em->createQuery(
"SELECT COUNT(g.id) + 1 FROM ". Game::class ." g WHERE g.score > :score AND g.level = :level"
)
->setParameters([
'score' => $game->getScore(),
'level' => $game->getLevel(),
]);
$position = $query->getSingleScalarResult();
$total = $this->getCountForLevel($game->getLevel());
$highscore = $this->getHighscoreForLevel($game->getLevel());
return new Position($position, $total, $game->getScore(), $highscore);
}
public function getCountForLevel(Level $level) {
$query = $this->_em->createQuery(
"SELECT COUNT(g.id) FROM ".Game::class." g WHERE g.level = :level"
)
->setParameters([
'level' => $level,
]);
return $query->getSingleScalarResult();
}
/**
* @return float
*/
public function getHighscoreForLevel(Level $level) {
$query = $this->_em->createQuery(
"SELECT MAX(g.score) FROM ".Game::class." g WHERE g.level = :level"
)
->setParameters([
'level' => $level,
]);
return $query->getSingleScalarResult();
}
/**
* @return int
*/
public function getCreatedCountOnDate($date) {
$query = $this->_em->createQuery(
"SELECT COUNT(g.id) FROM ".Game::class." g WHERE DATE(g.createdAt) = :date"
)
->setParameters([
'date'=> $date,
]);
return (int) $query->getSingleScalarResult();
}
}