Skip to content

Commit

Permalink
Add current user to certain messages
Browse files Browse the repository at this point in the history
  • Loading branch information
jvangestel committed Aug 15, 2024
1 parent c9d544f commit 9c34601
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 1 deletion.
30 changes: 30 additions & 0 deletions src/Messenger/CurrentUserMiddleware.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

declare(strict_types=1);

namespace Gems\Messenger;

use Gems\Legacy\CurrentUserRepository;
use Gems\Messenger\Message\CurrentUserMessage;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Middleware\MiddlewareInterface;
use Symfony\Component\Messenger\Middleware\StackInterface;

class CurrentUserMiddleware implements MiddlewareInterface
{
public function __construct(
private readonly CurrentUserRepository $currentUserRepository,
)
{}

public function handle(Envelope $envelope, StackInterface $stack): Envelope
{
$message = $envelope->getMessage();
if ($message instanceof CurrentUserMessage && $this->currentUserRepository->getCurrentLoginName() === null) {
$this->currentUserRepository->setCurrentUserCredentials($message->getUserName(), $message->getOrganizationId());
$this->currentUserRepository->getCurrentUser();
}

return $stack->next()->handle($envelope, $stack);
}
}
31 changes: 31 additions & 0 deletions src/Messenger/Message/CurrentUserMessage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

declare(strict_types=1);

namespace Gems\Messenger\Message;

class CurrentUserMessage
{
public function __construct(
protected readonly string $userName,
protected readonly int $organizationId
)
{
}

/**
* @return string
*/
public function getUserName(): string
{
return $this->userName;
}

/**
* @return int
*/
public function getOrganizationId(): int
{
return $this->organizationId;
}
}
38 changes: 37 additions & 1 deletion src/Messenger/MessengerFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@

namespace Gems\Messenger;


use Gems\Legacy\CurrentUserRepository;
use Laminas\ServiceManager\Factory\FactoryInterface;
use Psr\Container\ContainerInterface;
use Psr\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\Messenger\EventListener\SendFailedMessageToFailureTransportListener;
use Symfony\Component\Messenger\MessageBus;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Middleware\AddBusNameStampMiddleware;
Expand Down Expand Up @@ -37,7 +40,7 @@ public function __invoke(ContainerInterface $container, $requestedName, ?array $
$customMiddleware = $config['messenger']['buses'][$this->busName]['middleware'];
}

$eventDispatcher = $container->get(EventDispatcherInterface::class);
$eventDispatcher = $this->getEventDispatcher($container);

$sendMessageLocator = $this->getSendMessageLocator($config['messenger']['buses'][$this->busName], $container);
$sendMessageMiddleware = new SendMessageMiddleware($sendMessageLocator, $eventDispatcher);
Expand All @@ -57,6 +60,7 @@ public function __invoke(ContainerInterface $container, $requestedName, ?array $
}

$middleware = [
new CurrentUserMiddleware($container->get(CurrentUserRepository::class)),
new AddBusNameStampMiddleware($this->busName),
new RejectRedeliveredMessageMiddleware(),
new DispatchAfterCurrentBusMiddleware(),
Expand All @@ -69,6 +73,38 @@ public function __invoke(ContainerInterface $container, $requestedName, ?array $
return new MessageBus($middleware);
}

protected function addFailedMessageListener(EventDispatcherInterface $eventDispatcher, ContainerInterface $container): void
{
$config = $container->get('config');
$failureTransportName = $config['messenger']['failure_transport'] ?? null;
if (!$failureTransportName) {
return;
}
if (!$container->has($failureTransportName)) {
return;
}

new SendFailedMessageToFailureTransportListener(
$container->get($failureTransportName),
null// $logger
);

}

protected function getEventDispatcher(ContainerInterface $container): EventDispatcherInterface
{
$eventDispatcher = $container->get(EventDispatcherInterface::class);

//$this->addFailedMessageListener($eventDispatcher, $container);

/*new SendFailedMessageToFailureTransportListener(
$container->get($failureTransportName),
$logger ? $container->get($logger) : null
);*/

return $eventDispatcher;
}

protected function getHandleMessageLocator(array $config, ContainerInterface $container): Psr11HandlersLocator
{
if (!isset($config['handlers'])) {
Expand Down

0 comments on commit 9c34601

Please sign in to comment.