<?php
namespace App\EventSubscriber\Tournament;
use App\Entity\Config;
use App\Entity\Prize;
use App\Entity\Tournament;
use App\Repository\ConfigRepository;
use DomainException;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class TournamentCreatedEventSubscriber implements EventSubscriberInterface
{
public function __construct(private ConfigRepository $configRepository)
{
}
public function onBeforeEntityPersistedEvent(BeforeEntityPersistedEvent $beforeEntityPersistedEvent): void
{
$entity = $beforeEntityPersistedEvent->getEntityInstance();
if (!($entity instanceof Tournament)) {
return;
}
$tournamentTax = $this->configRepository->findOneBy([
'name' => Config::TOURNAMENT_TAX_AMOUNT,
]);
if (!$tournamentTax) {
throw new DomainException('The tax must be configured.');
}
$tax = (int) $tournamentTax->getValue();
$entity->setTax($tax);
if (!$entity->getPrizeBundle()) {
return;
}
foreach ($entity->getPrizeBundle()->getPrizeConfigs() as $prizeConfig) {
$entity->addPrize(
(new Prize())
->setRank($prizeConfig->getRank())
->setValue($prizeConfig->getValue())
->setDescription($prizeConfig->getDescription())
);
}
}
public static function getSubscribedEvents(): array
{
return [
BeforeEntityPersistedEvent::class => 'onBeforeEntityPersistedEvent',
];
}
}