8000 noop event handlers · msgphp/msgphp@352320d · GitHub
[go: up one dir, main page]

Skip to content

Commit 352320d

Browse files
committed
noop event handlers
1 parent 14de76f commit 352320d

File tree

4 files changed

+57
-14
lines changed

4 files changed

+57
-14
lines changed

src/Domain/Infra/DependencyInjection/BundleHelper.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ public static function initDomain(ContainerBuilder $container): void
5757
$container->register(SimpleBusInfra\ConsoleMessageSubscriberMiddleware::class)
5858
->setPublic(false)
5959
->setAutowired(true)
60-
->addTag('command_bus_middleware')
61-
->addTag('event_bus_middleware');
60+
->addTag('command_bus_middleware');
6261
}
6362
}
6463

src/Domain/Infra/DependencyInjection/ContainerHelper.php

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,18 @@
77
use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
88
use Doctrine\DBAL\Types\Type as DoctrineType;
99
use Doctrine\ORM\Version as DoctrineOrmVersion;
10+
use MsgPhp\Domain\Command\EventMessageCommandHandler;
11+
use MsgPhp\Domain\Infra\{Console as ConsoleInfra, SimpleBus as SimpleBusInfra};
1012
use Ramsey\Uuid\Doctrine as DoctrineUuid;
1113
use SimpleBus\SymfonyBridge\SimpleBusCommandBusBundle;
12-
use MsgPhp\Domain\Infra\Console as ConsoleInfra;
14+
use SimpleBus\SymfonyBridge\SimpleBusEventBusBundle;
1315
use Symfony\Component\DependencyInjection\ChildDefinition;
1416
use Symfony\Component\DependencyInjection\Container;
1517
use Symfony\Component\DependencyInjection\ContainerBuilder;
1618
use Symfony\Component\DependencyInjection\Definition;
1719
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
20+
use Symfony\Component\DependencyInjection\Reference;
21+
use Symfony\Component\Messenger\MessageBusInterface;
1822

1923
/**
2024
* @author Roland Franssen <franssen.roland@gmail.com>
@@ -230,31 +234,64 @@ public static function configureDoctrineOrmRepositories(ContainerBuilder $contai
230234

231235
public static function configureCommandMessages(ContainerBuilder $container, array $classMapping, array $commands): void
232236
{
233-
$configure = function (string $tag) use ($container, $classMapping, $commands) {
237+
$configure = function (string $tag, string $attrName) use ($container, $classMapping, $commands) {
234238
foreach ($container->findTaggedServiceIds($tag) as $id => $attr) {
235239
foreach ($attr as $attr) {
236-
if (!isset($attr[$attrName = 'handles'])) {
240+
if (!isset($attr[$attrName])) {
237241
continue;
238242
}
239243

240-
if ($commands[$command = $attr[$attrName]] ?? false) {
241-
if (isset($classMapping[$command])) {
242-
$container->getDefinition($id)
243-
->addTag($tag, [$attrName => $classMapping[$command]]);
244-
}
244+
$enabled = $commands[$command = $attr[$attrName]] ?? false;
245245

246+
if (!$enabled) {
247+
$container->removeDefinition($id);
246248
continue;
247249
}
248250

249-
$container->removeDefinition($id);
251+
if (isset($classMapping[$command])) {
252+
$container->getDefinition($id)
253+
->addTag($tag, [$attrName => $classMapping[$command], 'priority' => $attr['priority'] ?? 0]);
254+
}
250255
}
251 EDBE 256
}
252257
};
253258

254-
$configure('messenger.message_handler');
259+
if (interface_exists(MessageBusInterface::class)) {
260+
$configure('messenger.message_handler', 'handles');
261+
}
255262

256263
if (self::hasBundle($container, SimpleBusCommandBusBundle::class)) {
257-
$configure('command_handler');
264+
$configure('command_handler', 'handles');
265+
}
266+
}
267+
268+
public static function configureEventMessages(ContainerBuilder $container, array $classMapping, array $events): void
269+
{
270+
$configure = function (Definition $handler, string $tag, string $attrName) use ($classMapping, $events) {
271+
foreach ($events as $event) {
272+
$handler->addTag($tag, [$attrName => $event, 'priority' => -100]);
273+
274+
if (isset($classMapping[$event])) {
275+
$handler->addTag($tag, [$attrName => $classMapping[$event], 'priority' => -100]);
276+
}
277+
}
278+
};
279+
280+
if (interface_exists(MessageBusInterface::class)) {
281+
$handler = self::registerAnonymous($container, EventMessageCommandHandler::class);
282+
283+
$configure($handler, 'messenger.message_handler', 'handles');
284+
}
285+
286+
if (self::hasBundle($container, SimpleBusCommandBusBundle::class)) {
287+
$handler = self::registerAnonymous($container, EventMessageCommandHandler::class);
288+
$handler->setPublic(true);
289+
if (self::hasBundle($container, SimpleBusEventBusBundle::class)) {
290+
$handler->setArgument('$eventBus', self::registerAnonymous($container, SimpleBusInfra\DomainMessageBus::class)
291+
->setArgument('$bus', new Reference('simple_bus.event_bus')));
292+
}
293+
294+
$configure($handler, 'command_handler', 'handles');
258295
}
259296
}
260297

src/UserBundle/DependencyInjection/Extension.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ public function load(array $configs, ContainerBuilder $container): void
9393
Command\Handler\DeleteUserRoleHandler::class,
9494
]);
9595
ContainerHelper::configureCommandMessages($container, $config['class_mapping'], $config['commands']);
96+
ContainerHelper::configureEventMessages($container, $config['class_mapping'], array_map(function (string $file): string {
97+
return 'MsgPhp\\User\\Event\\'.basename($file, '.php');
98+
}, glob(dirname(ContainerHelper::getClassReflection($container, UserIdInterface::class)->getFileName()).'/Event/*Event.php')));
9699
}
97100

98101
// framework infra

src/UserBundle/Resources/config/message.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use SimpleBus\SymfonyBridge\SimpleBusCommandBusBundle;
88
use Symfony\Component\DependencyInjection\ContainerBuilder;
99
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
10+
use Symfony\Component\Messenger\MessageBusInterface;
1011

1112
/** @var ContainerBuilder $container */
1213
$container = $container ?? (function (): ContainerBuilder { throw new \LogicException('Invalid context.'); })();
@@ -23,11 +24,14 @@
2324
->load($ns = 'MsgPhp\\User\\Command\\Handler\\', $handlers = $baseDir.'/Command/Handler/*Handler.php')
2425
;
2526

27+
$messengerEnabled = interface_exists(MessageBusInterface::class);
2628
foreach (glob($handlers) as $file) {
2729
$service = $services->get($handler = $ns.basename($file, '.php'));
2830
$handles = $reflector($handler)->getMethod('__invoke')->getParameters()[0]->getClass()->getName();
2931

30-
$service->tag('messenger.message_handler', ['handles' => $handles]);
32+
if ($messengerEnabled) {
33+
$service->tag('messenger.message_handler', ['handles' => $handles]);
34+
}
3135

3236
if ($simpleCommandBusEnabled) {
3337
$service->tag('command_handler', ['handles' => $handles]);

0 commit comments

Comments
 (0)
0