From 36238f45bb2a1a02d048ba1b80890527995a0a8a Mon Sep 17 00:00:00 2001 From: Marijn Doeve Date: Fri, 10 Jul 2026 19:31:47 +0200 Subject: [PATCH] fix: wrap candidate progress reset in a transaction Avoids leaving a candidate half-reset (answers deleted but started still set) if the second flush fails. Addresses CodeRabbit review comment on PR #204. --- src/Controller/Backoffice/QuizController.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Controller/Backoffice/QuizController.php b/src/Controller/Backoffice/QuizController.php index 60078c5..be1a436 100644 --- a/src/Controller/Backoffice/QuizController.php +++ b/src/Controller/Backoffice/QuizController.php @@ -409,8 +409,10 @@ class QuizController extends AbstractController )] public function resetCandidateProgress(Quiz $quiz, Candidate $candidate): RedirectResponse { - $this->givenAnswerRepository->deleteAllForCandidateInQuiz($quiz, $candidate); - $this->quizCandidateRepository->resetProgressForCandidate($quiz, $candidate); + $this->em->wrapInTransaction(function () use ($quiz, $candidate): void { + $this->givenAnswerRepository->deleteAllForCandidateInQuiz($quiz, $candidate); + $this->quizCandidateRepository->resetProgressForCandidate($quiz, $candidate); + }); $this->addFlash(FlashType::Success, $this->translator->trans('Candidate progress reset'));