diff --git a/src/Controller/Backoffice/QuizController.php b/src/Controller/Backoffice/QuizController.php index ad2c91e..df9c5c0 100644 --- a/src/Controller/Backoffice/QuizController.php +++ b/src/Controller/Backoffice/QuizController.php @@ -19,7 +19,6 @@ use Tvdt\Entity\Candidate; use Tvdt\Entity\Quiz; use Tvdt\Entity\Season; use Tvdt\Exception\ErrorClearingQuizException; -use Tvdt\Repository\CandidateRepository; use Tvdt\Repository\QuizCandidateRepository; use Tvdt\Repository\QuizRepository; use Tvdt\Security\Voter\SeasonVoter; @@ -29,7 +28,7 @@ use Tvdt\Security\Voter\SeasonVoter; class QuizController extends AbstractController { public function __construct( - private readonly CandidateRepository $candidateRepository, + private readonly QuizRepository $quizRepository, private readonly TranslatorInterface $translator, ) {} @@ -44,7 +43,7 @@ class QuizController extends AbstractController return $this->render('backoffice/quiz.html.twig', [ 'season' => $season, 'quiz' => $quiz, - 'result' => $this->candidateRepository->getScores($quiz), + 'result' => $this->quizRepository->getScores($quiz), ]); } diff --git a/src/Factory/EliminationFactory.php b/src/Factory/EliminationFactory.php index 7ce5d2c..10a9d79 100644 --- a/src/Factory/EliminationFactory.php +++ b/src/Factory/EliminationFactory.php @@ -7,12 +7,12 @@ namespace Tvdt\Factory; use Doctrine\ORM\EntityManagerInterface; use Tvdt\Entity\Elimination; use Tvdt\Entity\Quiz; -use Tvdt\Repository\CandidateRepository; +use Tvdt\Repository\QuizRepository; final readonly class EliminationFactory { public function __construct( - private CandidateRepository $candidateRepository, + private QuizRepository $quizRepository, private EntityManagerInterface $em, ) {} @@ -21,7 +21,7 @@ final readonly class EliminationFactory $elimination = new Elimination($quiz); $this->em->persist($elimination); - $scores = $this->candidateRepository->getScores($quiz); + $scores = $this->quizRepository->getScores($quiz); $simpleScores = []; diff --git a/src/Repository/CandidateRepository.php b/src/Repository/CandidateRepository.php index e2a4643..d883794 100644 --- a/src/Repository/CandidateRepository.php +++ b/src/Repository/CandidateRepository.php @@ -6,12 +6,8 @@ namespace Tvdt\Repository; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; -use Safe\DateTimeImmutable; -use Safe\Exceptions\DatetimeException; use Safe\Exceptions\UrlException; -use Tvdt\Dto\Result; use Tvdt\Entity\Candidate; -use Tvdt\Entity\Quiz; use Tvdt\Entity\Season; use Tvdt\Helpers\Base64; @@ -42,40 +38,4 @@ class CandidateRepository extends ServiceEntityRepository ->setParameter('name', $name) ->getOneOrNullResult(); } - - /** - * @throws DatetimeException - * - * @return list - */ - public function getScores(Quiz $quiz): array - { - $result = $this->getEntityManager()->createQuery(<<setParameter('quiz', $quiz)->getResult(); - - return array_map(static fn (array $row): Result => new Result( - id: $row['id'], - name: $row['name'], - correct: (int) $row['correct'], - corrections: $row['corrections'], - time: new DateTimeImmutable($row['end_time'])->diff($row['start_time']), - score: $row['score'], - ), $result); - } } diff --git a/src/Repository/QuizRepository.php b/src/Repository/QuizRepository.php index c06f395..6b42a4c 100644 --- a/src/Repository/QuizRepository.php +++ b/src/Repository/QuizRepository.php @@ -7,6 +7,9 @@ namespace Tvdt\Repository; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; use Psr\Log\LoggerInterface; +use Safe\DateTimeImmutable; +use Safe\Exceptions\DatetimeException; +use Tvdt\Dto\Result; use Tvdt\Entity\Quiz; use Tvdt\Exception\ErrorClearingQuizException; @@ -60,4 +63,40 @@ class QuizRepository extends ServiceEntityRepository $this->getEntityManager()->remove($quiz); $this->getEntityManager()->flush(); } + + /** + * @throws DatetimeException + * + * @return list + */ + public function getScores(Quiz $quiz): array + { + $result = $this->getEntityManager()->createQuery(<<setParameter('quiz', $quiz)->getResult(); + + return array_map(static fn (array $row): Result => new Result( + id: $row['id'], + name: $row['name'], + correct: (int) $row['correct'], + corrections: $row['corrections'], + time: new DateTimeImmutable($row['end_time'])->diff($row['start_time']), + score: $row['score'], + ), $result); + } } diff --git a/tests/Repository/CandidateRepositoryTest.php b/tests/Repository/CandidateRepositoryTest.php index b4c8530..0a78eea 100644 --- a/tests/Repository/CandidateRepositoryTest.php +++ b/tests/Repository/CandidateRepositoryTest.php @@ -53,9 +53,4 @@ final class CandidateRepositoryTest extends DatabaseTestCase ); $this->assertNotInstanceOf(Candidate::class, $result); } - - public function testGetScores(): void - { - $this->markTestIncomplete('TODO: Make fixtures first and write good test.'); - } } diff --git a/tests/Repository/QuizRepositoryTest.php b/tests/Repository/QuizRepositoryTest.php index af9dd97..0b3abdc 100644 --- a/tests/Repository/QuizRepositoryTest.php +++ b/tests/Repository/QuizRepositoryTest.php @@ -42,4 +42,9 @@ final class QuizRepositoryTest extends DatabaseTestCase $this->assertCount(1, $krtekSeason->quizzes); } + + public function testGetScores(): void + { + $this->markTestIncomplete('TODO: Make fixtures first and write good test.'); + } }