<?php
namespace App\EventSubscriber\PsRequest;
use App\Entity\PsRequest;
use App\Entity\Transaction;
use App\Factory\TransactionFactory;
use App\Service\MailerService;
use DateTimeImmutable;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Twig\Environment;
class PsRequestUpdatedEventSubscriber implements EventSubscriberInterface
{
public function __construct(
private MailerService $mailerService, private Environment $twig, private EntityManagerInterface $entityManager,
private TransactionFactory $transactionFactory
) {
}
public static function getSubscribedEvents(): array
{
return [
AfterEntityUpdatedEvent::class => ['onPsRequestUpdate'],
];
}
public function onPsRequestUpdate(AfterEntityUpdatedEvent $event): void
{
$entity = $event->getEntityInstance();
if (!($entity instanceof PsRequest)) {
return;
}
$psRequestStatus = $entity->getStatus();
$psAmount = $entity->getAmount();
$player = $entity->getPlayer();
$user = $player->getUser();
$player->setUpdatedAt(new DateTimeImmutable('now'));
if ($psRequestStatus === PsRequest::COMPLETED_STATUS) {
$emailTemplate = $this->twig->render('emails/ps-request/accepted-ps-request.mjml.twig', ['username' => $user->getUserIdentifier(), 'psAmount' => $psAmount]);
$this->mailerService->send($user->getEmail(), "Votre demande d'échange de ps à bien été traitée !", $emailTemplate);
}
if ($psRequestStatus === PsRequest::REFUSED_STATUS) {
// refunds the player
$this->transactionFactory
->forPlayer($player)
->givePs($psAmount)
->because(Transaction::REFUND_PS_TO_EURO_TYPE)
->save()
;
$emailTemplate = $this->twig->render('emails/ps-request/refused-ps-request.mjml.twig', ['username' => $user->getUserIdentifier(), 'psAmount' => $psAmount, 'message' => $entity->getMessage()]);
$this->mailerService->send($user->getEmail(), "Votre demande d'échange de ps à été refusée.", $emailTemplate);
}
$this->entityManager->flush();
}
}