doublerService = $doublerService; } /** * @throws AuditionAdminException */ public function __invoke(Entry $entry, string $decision): void { $this->doublerDecision($entry, $decision); } /** * @throws AuditionAdminException */ public function doublerDecision(Entry $entry, string $decision): void { match ($decision) { 'accept' => $this->accept($entry), 'decline' => $this->decline($entry), default => throw new AuditionAdminException('Invalid decision specified') }; if ($decision != 'accept' && $decision != 'decline') { throw new AuditionAdminException('Invalid decision specified'); } } public function accept($entry): void { // Decline all other entries $doublerInfo = $this->doublerService->simpleDoubleInfo($entry); foreach ($doublerInfo as $doublerEntry) { /** @var Entry $doublerEntry */ if ($doublerEntry->id !== $entry->id) { $doublerEntry->addFlag('declined'); } } } /** * @throws AuditionAdminException */ public function decline($entry): void { if ($entry->hasFlag('declined')) { throw new AuditionAdminException('Entry is already declined'); } $entry->addFlag('declined'); } }