diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2c685c5..9f7b800 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,6 +25,13 @@ jobs: symfony-version: # https://symfony.com/releases - "6.4" - "7.4" + - "8.1" + exclude: + # Symfony 8 requires PHP 8.4 or higher + - php-version: "8.2" + symfony-version: "8.1" + - php-version: "8.3" + symfony-version: "8.1" steps: - name: "Checkout" uses: "actions/checkout@v7" diff --git a/composer.json b/composer.json index 6db0c1f..c24e100 100644 --- a/composer.json +++ b/composer.json @@ -36,10 +36,10 @@ } ], "require": { - "php": "^7.4 || ^8.0", + "php": "^8.2", "broadway/broadway": "^2.2.1", - "symfony/console": "^4.4 || ^5.3 || ^6.0 || ^7.0", - "symfony/http-kernel": "^4.4 || ^5.3 || ^6.0 || ^7.0" + "symfony/console": "^6.4 || ^7.4 || ^8.0", + "symfony/http-kernel": "^6.4 || ^7.4 || ^8.0" }, "require-dev": { "broadway/broadway-saga": "^1.0", @@ -48,8 +48,7 @@ "monolog/monolog": "~2.0", "phpstan/phpstan": "^2.0", "phpunit/phpunit": "^11.5", - "symfony/framework-bundle": "^4.4 || ^5.3 || ^6.0 || ^7.0", - "symfony/proxy-manager-bridge": "^4.4 || ^5.3 || ^6.0", + "symfony/framework-bundle": "^6.4 || ^7.4 || ^8.0", "phpstan/phpstan-symfony": "^2.0", "friendsofphp/php-cs-fixer": "^3.0" }, diff --git a/src/DependencyInjection/BroadwayExtension.php b/src/DependencyInjection/BroadwayExtension.php index cf687a1..bb71569 100644 --- a/src/DependencyInjection/BroadwayExtension.php +++ b/src/DependencyInjection/BroadwayExtension.php @@ -17,15 +17,15 @@ use Symfony\Component\Config\Loader\LoaderInterface; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; +use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension; class BroadwayExtension extends ConfigurableExtension { protected function loadInternal(array $mergedConfig, ContainerBuilder $container): void { - $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); - $loader->load('services.xml'); + $loader = new PhpFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader->load('services.php'); if (isset($mergedConfig['event_store'])) { $container->setParameter('broadway.event_store.service_id', $mergedConfig['event_store']); @@ -39,7 +39,7 @@ protected function loadInternal(array $mergedConfig, ContainerBuilder $container $this->loadSerializers($mergedConfig['serializer'], $container, $loader); if (isset($mergedConfig['saga']) && isset($mergedConfig['saga']['enabled']) && $mergedConfig['saga']['enabled']) { - $loader->load('saga.xml'); + $loader->load('saga.php'); if (isset($mergedConfig['saga']['state_repository'])) { $container->setParameter( @@ -59,7 +59,7 @@ private function loadCommandBus(array $config, ContainerBuilder $container, Load ); if ($logger = $config['logger']) { - $loader->load('auditing.xml'); + $loader->load('auditing.php'); $container->setAlias('broadway.auditing.logger', new Alias($logger, true)); } } else { @@ -70,9 +70,9 @@ private function loadCommandBus(array $config, ContainerBuilder $container, Load } } - private function loadSerializers(array $config, ContainerBuilder $container, XmlFileLoader $loader): void + private function loadSerializers(array $config, ContainerBuilder $container, PhpFileLoader $loader): void { - $loader->load('serializers.xml'); + $loader->load('serializers.php'); foreach ($config as $serializer => $serviceId) { $container->setParameter(sprintf('broadway.serializer.%s.service_id', $serializer), $serviceId); diff --git a/src/Resources/config/auditing.php b/src/Resources/config/auditing.php new file mode 100644 index 0000000..f5b5002 --- /dev/null +++ b/src/Resources/config/auditing.php @@ -0,0 +1,37 @@ +services(); + + $services->set('broadway.auditing.command_logger', CommandLogger::class) + ->args([ + service('broadway.auditing.logger'), + service('broadway.auditing.serializer'), + ]) + ->tag('broadway.event_listener', [ + 'event' => 'broadway.command_handling.command_success', + 'method' => 'onCommandHandlingSuccess', + ]) + ->tag('broadway.event_listener', [ + 'event' => 'broadway.command_handling.command_failure', + 'method' => 'onCommandHandlingFailure', + ]); + + $services->set('broadway.auditing.serializer', NullByteCommandSerializer::class); +}; diff --git a/src/Resources/config/auditing.xml b/src/Resources/config/auditing.xml deleted file mode 100644 index 5334ae5..0000000 --- a/src/Resources/config/auditing.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/src/Resources/config/saga.php b/src/Resources/config/saga.php new file mode 100644 index 0000000..38a69f3 --- /dev/null +++ b/src/Resources/config/saga.php @@ -0,0 +1,48 @@ +services(); + + $services->set('broadway.saga.state.state_manager', StateManager::class) + ->args([ + service('broadway.saga.state.repository'), + service('broadway.uuid.generator'), + ]); + + $services->set('broadway.saga.metadata.factory', StaticallyConfiguredSagaMetadataFactory::class); + + $services->set('broadway.saga.metadata_enricher', SagaMetadataEnricher::class) + ->tag('broadway.event_listener', ['event' => 'broadway.saga.post_handle', 'method' => 'postHandleSaga']) + ->tag('broadway.metadata_enricher'); + + $services->set('broadway.saga.multiple_saga_manager', MultipleSagaManager::class) + ->args([ + service('broadway.saga.state.repository'), + // will be populated by RegisterSagaCompilerPass: + [], + service('broadway.saga.state.state_manager'), + service('broadway.saga.metadata.factory'), + service('broadway.event_dispatcher'), + ]); + + $services->set('broadway.saga.state.in_memory_repository', InMemoryRepository::class); +}; diff --git a/src/Resources/config/saga.xml b/src/Resources/config/saga.xml deleted file mode 100644 index e17f4a3..0000000 --- a/src/Resources/config/saga.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Resources/config/serializers.php b/src/Resources/config/serializers.php new file mode 100644 index 0000000..d96193e --- /dev/null +++ b/src/Resources/config/serializers.php @@ -0,0 +1,21 @@ +services() + ->set('broadway.simple_interface_serializer', SimpleInterfaceSerializer::class); +}; diff --git a/src/Resources/config/serializers.xml b/src/Resources/config/serializers.xml deleted file mode 100644 index ae9f635..0000000 --- a/src/Resources/config/serializers.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/src/Resources/config/services.php b/src/Resources/config/services.php new file mode 100644 index 0000000..8359154 --- /dev/null +++ b/src/Resources/config/services.php @@ -0,0 +1,56 @@ +services(); + + $services->set('broadway.command_handling.simple_command_bus', SimpleCommandBus::class); + + $services->set('broadway.command_handling.event_dispatching_command_bus', EventDispatchingCommandBus::class) + ->args([ + service('broadway.command_handling.simple_command_bus'), + service('broadway.event_dispatcher'), + ]); + + $services->set('broadway.event_handling.event_bus', SimpleEventBus::class); + + $services->set('broadway.uuid.converter', BinaryUuidConverter::class); + + $services->set('broadway.uuid.generator', Version4Generator::class) + ->public(); + + $services->set('broadway.metadata_enriching_event_stream_decorator', MetadataEnrichingEventStreamDecorator::class); + + $services->set('broadway.metadata_enricher.console', CommandMetadataEnricher::class) + ->tag('kernel.event_listener', ['event' => 'console.command', 'method' => 'handleConsoleCommandEvent']) + ->tag('broadway.metadata_enricher'); + + $services->set('broadway.event_dispatcher', CallableEventDispatcher::class); + + $services->set('broadway.event_store.in_memory', InMemoryEventStore::class); + + $services->set('broadway.read_model.in_memory.repository_factory', InMemoryRepositoryFactory::class); +}; diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml deleted file mode 100644 index 1b71850..0000000 --- a/src/Resources/config/services.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -