diff --git a/README.md b/README.md index 9e97ae6..4feb317 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,8 @@ gember_event_sourcing: command_bus: '@command.bus' cache: enabled: true - psr6: '@cache.app' + psr6: + service: '@cache.app' # Or set a PSR-16 compatible cache layer of your choice # psr16: '@some.psr16.service' @@ -53,7 +54,9 @@ gember_event_sourcing: path: '%kernel.project_dir%/src' saga: reflector: - path: '%kernel.project_dir%/src' + path: '%kernel.project_dir%/src' + logging: + logger: '@logger' ``` You can override any of these defaults however you like. diff --git a/composer.json b/composer.json index ad220bf..e7a5eef 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ ], "require": { "php": "^8.3", - "gember/event-sourcing": "^0.10", + "gember/event-sourcing": "^0.11", "gember/identity-generator-symfony": "^0.9", "gember/message-bus-symfony": "^0.9", "gember/rdbms-event-store-doctrine-dbal": "^0.9", diff --git a/composer.lock b/composer.lock index 3af8d0e..7482f7e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "202e59974617eb441aaf5eea2419d014", + "content-hash": "418d1b5576f1751cb066ecabc65640c6", "packages": [ { "name": "doctrine/dbal", @@ -218,16 +218,16 @@ }, { "name": "gember/event-sourcing", - "version": "0.10.0", + "version": "0.11.0", "source": { "type": "git", "url": "https://github.com/GemberPHP/event-sourcing.git", - "reference": "d133ef34f56332370c5b31bbf0f2f839a1edac03" + "reference": "e2fa4678df2addc943bf37015bb339476a1f7130" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GemberPHP/event-sourcing/zipball/d133ef34f56332370c5b31bbf0f2f839a1edac03", - "reference": "d133ef34f56332370c5b31bbf0f2f839a1edac03", + "url": "https://api.github.com/repos/GemberPHP/event-sourcing/zipball/e2fa4678df2addc943bf37015bb339476a1f7130", + "reference": "e2fa4678df2addc943bf37015bb339476a1f7130", "shasum": "" }, "require": { @@ -235,6 +235,7 @@ "ext-tokenizer": "*", "gember/dependency-contracts": "^0.2", "php": "^8.3", + "psr/log": "^3.0", "psr/simple-cache": "^3.0" }, "require-dev": { @@ -276,9 +277,9 @@ ], "support": { "issues": "https://github.com/GemberPHP/event-sourcing/issues", - "source": "https://github.com/GemberPHP/event-sourcing/tree/0.10.0" + "source": "https://github.com/GemberPHP/event-sourcing/tree/0.11.0" }, - "time": "2025-10-10T13:13:18+00:00" + "time": "2025-10-14T17:25:24+00:00" }, { "name": "gember/identity-generator-symfony", diff --git a/config/services.yaml b/config/services.yaml index 7488823..999c385 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -88,9 +88,9 @@ services: Gember\EventSourcing\UseCase\CommandHandler\UseCaseCommandHandler: class: Gember\EventSourcing\UseCase\CommandHandler\UseCaseCommandHandler arguments: - - '@gember.event_sourcing.repository.use_case_repository' - '@gember.event_sourcing.registry.command_handler.command_handler_registry' - '@gember.event_sourcing.resolver.domain_command.domain_command_resolver' + - '@gember.event_sourcing.use_case.command_handler.use_case_command_executor' gember.event_sourcing.repository.use_case_repository: class: Gember\EventSourcing\Repository\EventSourced\EventSourcedUseCaseRepository @@ -334,8 +334,7 @@ services: arguments: - '@gember.event_sourcing.resolver.domain_event.domain_event_resolver' - '@gember.event_sourcing.registry.saga.saga_registry' - - '@gember.event_sourcing.repository.saga_store' - - '@gember.event_sourcing.util.messaging.message_bus.command_bus' + - '@gember.event_sourcing.saga.saga_event_executor' gember.event_sourcing.util.messaging.message_bus.command_bus: class: Gember\MessageBusSymfony\SymfonyCommandBus @@ -373,4 +372,38 @@ services: ] gember.rdbms_event_store_doctrine_dbal.saga.doctrine_dbal_rdbms_saga_factory: - class: Gember\RdbmsEventStoreDoctrineDbal\Saga\DoctrineDbalRdbmsSagaFactory \ No newline at end of file + class: Gember\RdbmsEventStoreDoctrineDbal\Saga\DoctrineDbalRdbmsSagaFactory + + gember.event_sourcing.use_case.command_handler.use_case_command_executor: + class: Gember\EventSourcing\UseCase\CommandHandler\Default\DefaultUseCaseCommandExecutor + arguments: + - '@gember.event_sourcing.repository.use_case_repository' + + gember.event_sourcing.use_case.command_handler.loggable.loggable_use_case_command_executor_decorator: + class: Gember\EventSourcing\UseCase\CommandHandler\Loggable\LoggableUseCaseCommandExecutorDecorator + decorates: gember.event_sourcing.use_case.command_handler.use_case_command_executor + arguments: + - '@.inner' + - '@gember.psr.log.logger_interface' + + gember.event_sourcing.saga.saga_event_executor: + class: Gember\EventSourcing\Saga\Default\DefaultSagaEventExecutor + arguments: + - '@gember.event_sourcing.util.messaging.message_bus.command_bus' + - '@gember.event_sourcing.repository.saga_store' + + gember.event_sourcing.saga.loggable.loggable_saga_event_executor_decorator: + class: Gember\EventSourcing\Saga\Loggable\LoggableSagaEventExecutorDecorator + decorates: gember.event_sourcing.saga.saga_event_executor + arguments: + - '@.inner' + - '@gember.psr.log.logger_interface' + + gember.event_sourcing.event_store.loggable.loggable_event_store_decorator: + class: Gember\EventSourcing\EventStore\Loggable\LoggableEventStoreDecorator + decorates: Gember\EventSourcing\EventStore\EventStore + arguments: + - '@.inner' + - '@gember.psr.log.logger_interface' + + gember.psr.log.logger_interface: '@logger' \ No newline at end of file diff --git a/src/GemberEventSourcingBundle.php b/src/GemberEventSourcingBundle.php index 2a12549..8be8272 100644 --- a/src/GemberEventSourcingBundle.php +++ b/src/GemberEventSourcingBundle.php @@ -110,6 +110,11 @@ public function configure(DefinitionConfigurator $definition): void ->end() ->end() ->end() + ->arrayNode('logging') + ->children() + ->scalarNode('logger')->end() + ->end() + ->end() ->end(); } @@ -203,6 +208,13 @@ public function loadExtension(array $config, ContainerConfigurator $container, C ); } + if (!empty($config['logging']['logger'] ?? null)) { + $services->alias( + 'gember.psr.log.logger_interface', + ltrim($config['logging']['logger'], '@'), + ); + } + $builder->registerAttributeForAutoconfiguration( DomainCommandHandler::class, function (ChildDefinition $definition, DomainCommandHandler $attribute, ReflectionMethod $reflector) use ($builder, $config): void {