Snippets

Andrew Stark nez9M6: Untitled snippet

Created by Andrew Stark
<?php
declare(strict_types = 1);

use Doctrine\Common\Persistence\Mapping\MappingException;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\ORMException;
use Exception;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;

class DeleteUserHandler
{
    /**
     * @var UserRepositoryInterface
     */
    private $userRepository;

    /**
     * @var LoggerInterface
     */
    private $logger;

    /**
     * @var EventDispatcherInterface
     */
    private $eventDispatcher;

    /**
     * @var EntityManagerInterface
     */
    private $entityManager;

    /**
     * DeleteUserHandler constructor.
     *
     * @param UserRepositoryInterface  $userRepository
     * @param LoggerInterface          $logger
     * @param EntityManagerInterface   $entityManager
     * @param EventDispatcherInterface $eventDispatcher
     */
    public function __construct(
        UserRepositoryInterface $userRepository,
        LoggerInterface $logger,
        EntityManagerInterface $entityManager,
        EventDispatcherInterface $eventDispatcher)
    {
        $this->userRepository = $userRepository;
        $this->logger = $logger;
        $this->eventDispatcher = $eventDispatcher;
        $this->entityManager = $entityManager;
    }

    /**
     * @param DeleteUser $command
     */
    public function handle(DeleteUser $command) : void
    {

        $this->entityManager->transactional(
            function($em) use ($command) {
                $filter = new UserFilter();
                $filter->setUuid($command->toUuid());
                try {
                    $user = $this->userRepository->single($filter);
                } catch (UserNotFoundException $exception) {
                    $this->logger->error(
                        'EXCEPTION: Deleting User with uuid ' . $command->toUuid() .
                        'Failed. No such record in database.'
                    );
                }
                try {
                    $this->userRepository->delete($user);
                    $userDeleted = true;
                } catch (MappingException | ORMException | Exception $exception) {
                    $userDeleted = false;
                    $this->logger->error(
                        'EXCEPTION: Deleting User with email ' . $user->toEmail()->email() .
                        '. Message: ' . $exception->getMessage()
                    );
                }
                if ($userDeleted) {
                    $this->logger->info('User with email: ' . $user->toEmail()->email() . ' was deleted.');
                    $this->eventDispatcher->dispatch('user.deleted');
                }
            }
        );
    }
}

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.