Add some suggestions for future refactoring

This commit is contained in:
2025-11-02 12:21:09 +01:00
parent 68b019135f
commit 456d09f459

View File

@@ -23,7 +23,6 @@ use Tvdt\Form\SelectSeasonType;
use Tvdt\Helpers\Base64; use Tvdt\Helpers\Base64;
use Tvdt\Repository\AnswerRepository; use Tvdt\Repository\AnswerRepository;
use Tvdt\Repository\CandidateRepository; use Tvdt\Repository\CandidateRepository;
use Tvdt\Repository\GivenAnswerRepository;
use Tvdt\Repository\QuestionRepository; use Tvdt\Repository\QuestionRepository;
use Tvdt\Repository\QuizCandidateRepository; use Tvdt\Repository\QuizCandidateRepository;
use Tvdt\Repository\SeasonRepository; use Tvdt\Repository\SeasonRepository;
@@ -84,7 +83,6 @@ final class QuizController extends AbstractController
CandidateRepository $candidateRepository, CandidateRepository $candidateRepository,
QuestionRepository $questionRepository, QuestionRepository $questionRepository,
AnswerRepository $answerRepository, AnswerRepository $answerRepository,
GivenAnswerRepository $givenAnswerRepository,
QuizCandidateRepository $quizCandidateRepository, QuizCandidateRepository $quizCandidateRepository,
): Response { ): Response {
$candidate = $candidateRepository->getCandidateByHash($season, $nameHash); $candidate = $candidateRepository->getCandidateByHash($season, $nameHash);
@@ -104,21 +102,24 @@ final class QuizController extends AbstractController
} }
if ('POST' === $request->getMethod()) { if ('POST' === $request->getMethod()) {
// TODO: Extract saving answer logic to a service
$answer = $answerRepository->findOneBy(['id' => $request->request->get('answer')]); $answer = $answerRepository->findOneBy(['id' => $request->request->get('answer')]);
if (!$answer instanceof Answer) { if (!$answer instanceof Answer) {
throw new BadRequestHttpException('Invalid Answer ID'); throw new BadRequestHttpException('Invalid Answer ID');
} }
$givenAnswer = new GivenAnswer($candidate, $answer->question->quiz, $answer); $givenAnswer = new GivenAnswer($candidate, $answer->question->quiz, $answer);
$this->entityManager->persist($givenAnswer); $this->entityManager->persist($givenAnswer);
$this->entityManager->flush(); $this->entityManager->flush();
// end of extarcting saving answer logic
return $this->redirectToRoute('tvdt_quiz_quiz_page', ['seasonCode' => $season->seasonCode, 'nameHash' => $nameHash]); return $this->redirectToRoute('tvdt_quiz_quiz_page', ['seasonCode' => $season->seasonCode, 'nameHash' => $nameHash]);
} }
// TODO: Extract getting next question logic to a service
$question = $questionRepository->findNextQuestionForCandidate($candidate); $question = $questionRepository->findNextQuestionForCandidate($candidate);
// Keep creating flash here based on return type of service call
if (!$question instanceof Question) { if (!$question instanceof Question) {
$this->addFlash(FlashType::Success, $this->translator->trans('Quiz completed')); $this->addFlash(FlashType::Success, $this->translator->trans('Quiz completed'));
@@ -127,6 +128,7 @@ final class QuizController extends AbstractController
$quizCandidateRepository->createIfNotExist($quiz, $candidate); $quizCandidateRepository->createIfNotExist($quiz, $candidate);
// end of extracting getting next question logic
return $this->render('quiz/question.twig', ['candidate' => $candidate, 'question' => $question, 'season' => $season]); return $this->render('quiz/question.twig', ['candidate' => $candidate, 'question' => $question, 'season' => $season]);
} }
} }