mirror of
https://github.com/MarijnDoeve/TijdVoorDeTest.git
synced 2026-07-05 23:20:18 +02:00
Answer on candidate (#72)
* Add Penalty Seconds on tests * Refactors and start of candidate answer relation * Add breadcrumbs and UI consistency updates across backoffice templates * Add breadcrumbs and UI consistency updates across backoffice templates * Add Dutch translations for email verification and security messages * Rector * Refactor for code consistency and type safety assertions across repositories and entities * Refactor candidate-related logic to optimize queries, improve template separation, and add "Answer Mapping" functionality. * Cleanup * Update Symfony * Add coderabbit config * Fixes from coderabbit
This commit is contained in:
@@ -6,6 +6,7 @@ namespace Tvdt\Repository;
|
||||
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
use Safe\DateTimeImmutable;
|
||||
use Tvdt\Entity\Candidate;
|
||||
use Tvdt\Entity\Quiz;
|
||||
use Tvdt\Entity\QuizCandidate;
|
||||
@@ -20,14 +21,28 @@ class QuizCandidateRepository extends ServiceEntityRepository
|
||||
parent::__construct($registry, QuizCandidate::class);
|
||||
}
|
||||
|
||||
/** @return bool true if a new entry was created */
|
||||
public function createIfNotExist(Quiz $quiz, Candidate $candidate): bool
|
||||
/** @return bool|null true if a new entry was created, false if it already exists, null if candidate is inactive */
|
||||
public function createIfNotExist(Quiz $quiz, Candidate $candidate): ?bool
|
||||
{
|
||||
if (0 !== $this->count(['candidate' => $candidate, 'quiz' => $quiz])) {
|
||||
$quizCandidate = $this->findOneBy(['candidate' => $candidate, 'quiz' => $quiz]);
|
||||
|
||||
if (null !== $quizCandidate) {
|
||||
// Check if candidate is inactive
|
||||
if (!$quizCandidate->active) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// If QuizCandidate exists but hasn't started yet, set the started timestamp
|
||||
if (null === $quizCandidate->started) {
|
||||
$quizCandidate->started = new DateTimeImmutable();
|
||||
$this->getEntityManager()->flush();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$quizCandidate = new QuizCandidate($quiz, $candidate);
|
||||
$quizCandidate->started = new DateTimeImmutable();
|
||||
$this->getEntityManager()->persist($quizCandidate);
|
||||
$this->getEntityManager()->flush();
|
||||
|
||||
@@ -44,4 +59,15 @@ class QuizCandidateRepository extends ServiceEntityRepository
|
||||
$quizCandidate->corrections = $corrections;
|
||||
$this->getEntityManager()->flush();
|
||||
}
|
||||
|
||||
public function setPenaltyForCandidate(Quiz $quiz, Candidate $candidate, int $penalty): void
|
||||
{
|
||||
$quizCandidate = $this->findOneBy(['candidate' => $candidate, 'quiz' => $quiz]);
|
||||
if (!$quizCandidate instanceof QuizCandidate) {
|
||||
throw new \InvalidArgumentException('Quiz candidate not found');
|
||||
}
|
||||
|
||||
$quizCandidate->penaltySeconds = $penalty;
|
||||
$this->getEntityManager()->flush();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user