<?php
namespace App\EventSubscriber;
use App\Entity\Event;
use App\Event\WebShopEvent;
use App\Service\Constants\LogEvents;
use App\Service\RabbitMQ\RabbitMQDispatcher;
use App\Service\Subscription\SubscriptionService;
use App\Service\UserLog;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use App\Event\AccountRegisterEvent;
class RegistrationEventSubscriber implements EventSubscriberInterface
{
protected RabbitMQDispatcher $rabbitMQDispatcher;
protected SubscriptionService $subscriptionService;
private UserLog $userLog;
public function __construct(
RabbitMQDispatcher $rabbitMQDispatcher,
SubscriptionService $subscriptionService,
UserLog $userLog
) {
$this->rabbitMQDispatcher = $rabbitMQDispatcher;
$this->subscriptionService = $subscriptionService;
$this->userLog = $userLog;
}
public static function getSubscribedEvents() : array
{
return [
AccountRegisterEvent::NAME => 'sendActivationEmail',
AccountRegisterEvent::MANUFACTURER_USER_REGISTER_SUCCESS => 'sendManufacturerUserRegisterSuccessEmail',
AccountRegisterEvent::CUSTOMER_USER_REGISTER_SUCCESS => [
['createNewCustomerUserNotification']
],
AccountRegisterEvent::USER_REGISTERED => [
['sendUserRegisteredEmail'],
['logUserCreated']
],
];
}
public function sendUserRegisteredEmail(AccountRegisterEvent $event)
{
$this->rabbitMQDispatcher->dispatch([
'data' => [
'user_uuid' => $event->getUser()->getUuid()
],
'action_name' => 'userRegisteredEmail',
'consumer_name' => 'notification_consumer'
]);
}
public function logUserCreated(AccountRegisterEvent $event)
{
$this->userLog->log(
'user',
LogEvents::USER_CREATED,
$event->getUser()->getId(),
$event->getUser()->getName()
);
}
public function sendActivationEmail(AccountRegisterEvent $event)
{
$this->rabbitMQDispatcher->dispatch([
'data' => [
'user_id' => $event->getUser()->getId(),
],
'action_name' => 'accountActivationEmail',
'consumer_name' => 'notification_consumer'
]);
}
public function sendManufacturerUserRegisterSuccessEmail(AccountRegisterEvent $event)
{
$this->rabbitMQDispatcher->dispatch([
'data' => [
'user_id' => $event->getUser()->getId(),
],
'action_name' => 'mfPersonRegisterSuccessEmail',
'consumer_name' => 'notification_consumer'
]);
}
public function createNewCustomerUserNotification(AccountRegisterEvent $event)
{
if ($customer = $event->getUser()->getCustomer()) {
$this->subscriptionService->proceedEvent(
Event::CUSTOMER_APP_USER_CREATED,
$customer,
['data' => ['uuid' => $customer->getUuid()]]
);
}
}
}