auditionadmin/app/Actions/Entries/DoublerDecision.php

67 lines
1.7 KiB
PHP

<?php
namespace App\Actions\Entries;
use App\Exceptions\AuditionAdminException;
use App\Models\Entry;
use App\Services\DoublerService;
class DoublerDecision
{
protected DoublerService $doublerService;
public function __construct(DoublerService $doublerService)
{
$this->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');
}
}