diff --git a/composer.json b/composer.json index dd6743f..721007b 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ ], "require": { "php": "^8.3", - "gember/event-sourcing": "^0.8", + "gember/event-sourcing": "^0.9", "gember/identity-generator-symfony": "^0.8", "gember/message-bus-symfony": "^0.8", "gember/rdbms-event-store-doctrine-dbal": "^0.8", diff --git a/composer.lock b/composer.lock index 296f5c2..bf1ff2c 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": "41bd59ecaf9bc3b05acec67de38a2a29", + "content-hash": "dbd704537f3e5fc8c4dc1fc8ba15fb2b", "packages": [ { "name": "doctrine/dbal", @@ -218,16 +218,16 @@ }, { "name": "gember/event-sourcing", - "version": "0.8.0", + "version": "0.9.0", "source": { "type": "git", "url": "https://github.com/GemberPHP/event-sourcing.git", - "reference": "a0b77098b9906bbb007eff2d9a268c43f30bc5ac" + "reference": "f4ae2fcc9e86f32a29e24b14662886927f193816" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GemberPHP/event-sourcing/zipball/a0b77098b9906bbb007eff2d9a268c43f30bc5ac", - "reference": "a0b77098b9906bbb007eff2d9a268c43f30bc5ac", + "url": "https://api.github.com/repos/GemberPHP/event-sourcing/zipball/f4ae2fcc9e86f32a29e24b14662886927f193816", + "reference": "f4ae2fcc9e86f32a29e24b14662886927f193816", "shasum": "" }, "require": { @@ -276,9 +276,9 @@ ], "support": { "issues": "https://github.com/GemberPHP/event-sourcing/issues", - "source": "https://github.com/GemberPHP/event-sourcing/tree/0.8.0" + "source": "https://github.com/GemberPHP/event-sourcing/tree/0.9.0" }, - "time": "2025-09-03T17:57:59+00:00" + "time": "2025-09-12T17:26:53+00:00" }, { "name": "gember/identity-generator-symfony", diff --git a/config/services.yaml b/config/services.yaml index d8a2dc9..2e1b6fa 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -5,7 +5,7 @@ services: Gember\EventSourcing\EventStore\EventStore: class: Gember\EventSourcing\EventStore\Rdbms\RdbmsEventStore arguments: - - '@gember.event_sourcing.resolver.domain_event.normalized_event_name.normalized_event_name_resolver' + - '@gember.event_sourcing.resolver.domain_event.domain_event_resolver' - '@gember.event_sourcing.event_store.rdbms.rdbms_domain_event_envelope_factory' - '@gember.event_sourcing.event_store.rdbms.rdbms_event_factory' - '@gember.event_sourcing.event_store.rdbms.rdbms_event_store_repository' @@ -13,7 +13,7 @@ services: gember.event_sourcing.event_store.domain_event_envelope_factory: class: Gember\EventSourcing\EventStore\DomainEventEnvelopeFactory arguments: - - '@gember.event_sourcing.resolver.domain_message.domain_tags.domain_tags_resolver' + - '@gember.event_sourcing.resolver.domain_event.domain_event_resolver' - '@gember.event_sourcing.util.generator.identity.identity_generator' - '@gember.event_sourcing.util.time.clock.clock' @@ -26,7 +26,7 @@ services: gember.event_sourcing.event_store.rdbms.rdbms_event_factory: class: Gember\EventSourcing\EventStore\Rdbms\RdbmsEventFactory arguments: - - '@gember.event_sourcing.resolver.domain_event.normalized_event_name.normalized_event_name_resolver' + - '@gember.event_sourcing.resolver.domain_event.domain_event_resolver' - '@gember.event_sourcing.util.serialization.serializer.serializer' gember.event_sourcing.event_store.rdbms.rdbms_event_store_repository: @@ -61,7 +61,7 @@ services: arguments: - '@gember.event_sourcing.util.file.finder.finder' - '@gember.event_sourcing.util.file.reflector.reflector' - - '@gember.event_sourcing.resolver.domain_event.normalized_event_name.normalized_event_name_resolver' + - '@gember.event_sourcing.resolver.domain_event.domain_event_resolver' gember.event_sourcing.registry.event.cached.cached_event_registry_decorator: class: Gember\EventSourcing\Registry\Event\Cached\CachedEventRegistryDecorator @@ -75,7 +75,7 @@ services: arguments: - '@gember.event_sourcing.util.file.finder.finder' - '@gember.event_sourcing.util.file.reflector.reflector' - - '@gember.event_sourcing.resolver.use_case.command_handlers.command_handlers_resolver' + - '@gember.event_sourcing.resolver.use_case.use_case_resolver' gember.event_sourcing.registry.command_handler.cached.cached_command_handler_registry_decorator: class: Gember\EventSourcing\Registry\CommandHandler\Cached\CachedCommandHandlerRegistryDecorator @@ -85,92 +85,26 @@ services: - '@gember.psr.simple_cache.cache_interface' - '@gember.event_sourcing.util.string.friendly_class_namer.friendly_class_namer' - gember.event_sourcing.resolver.use_case.command_handlers.command_handlers_resolver: - class: Gember\EventSourcing\Resolver\UseCase\CommandHandlers\Attribute\AttributeCommandHandlersResolver - arguments: - - '@gember.event_sourcing.util.attribute.resolver.attribute_resolver' - 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_message.domain_tags.domain_tags_resolver' + - '@gember.event_sourcing.resolver.domain_command.domain_command_resolver' gember.event_sourcing.repository.use_case_repository: class: Gember\EventSourcing\Repository\EventSourced\EventSourcedUseCaseRepository arguments: - '@Gember\EventSourcing\EventStore\EventStore' - '@gember.event_sourcing.event_store.domain_event_envelope_factory' - - '@gember.event_sourcing.resolver.use_case.subscribed_events.subscribed_events_resolver' + - '@gember.event_sourcing.resolver.use_case.use_case_resolver' - '@gember.event_sourcing.util.messaging.message_bus.event_bus' Gember\EventSourcing\Repository\UseCaseRepository: '@gember.event_sourcing.repository.use_case_repository' - gember.event_sourcing.resolver.use_case.domain_tag_properties.domain_tag_properties_resolver: - class: Gember\EventSourcing\Resolver\UseCase\DomainTagProperties\Attribute\AttributeDomainTagsPropertiesResolver - arguments: - - '@gember.event_sourcing.util.attribute.resolver.attribute_resolver' - - gember.event_sourcing.resolver.use_case.subscribed_events.subscribed_events_resolver: - class: Gember\EventSourcing\Resolver\UseCase\SubscribedEvents\Attribute\AttributeSubscribedEventsResolver - arguments: - - '@gember.event_sourcing.util.attribute.resolver.attribute_resolver' - - gember.event_sourcing.resolver.use_case.subscriber_method_for_event.subscriber_method_for_event_resolver: - class: Gember\EventSourcing\Resolver\UseCase\SubscriberMethodForEvent\Attribute\AttributeSubscriberMethodForEventResolver - arguments: - - '@gember.event_sourcing.util.attribute.resolver.attribute_resolver' - - gember.event_sourcing.resolver.domain_message.domain_tags.domain_tags_resolver: - class: Gember\EventSourcing\Resolver\DomainMessage\DomainTags\Stacked\StackedDomainTagsResolver - arguments: - - [ - '@gember.event_sourcing.resolver.domain_message.domain_tags.attribute.attribute_domain_tags_resolver', - '@gember.event_sourcing.resolver.domain_message.domain_tags.interface.interface_domain_tags_resolver' - ] - - gember.event_sourcing.resolver.domain_message.domain_tags.attribute.attribute_domain_tags_resolver: - class: Gember\EventSourcing\Resolver\DomainMessage\DomainTags\Attribute\AttributeDomainTagsResolver - arguments: - - '@gember.event_sourcing.util.attribute.resolver.attribute_resolver' - - gember.event_sourcing.resolver.domain_message.domain_tags.interface.interface_domain_tags_resolver: - class: Gember\EventSourcing\Resolver\DomainMessage\DomainTags\Interface\InterfaceDomainTagsResolver - - gember.event_sourcing.resolver.domain_event.normalized_event_name.normalized_event_name_resolver: - class: Gember\EventSourcing\Resolver\DomainEvent\NormalizedEventName\Stacked\StackedNormalizedEventNameResolver - arguments: - - [ - '@gember.event_sourcing.resolver.domain_event.normalized_event_name.attribute.attribute_normalized_event_name_resolver', - '@gember.event_sourcing.resolver.domain_event.normalized_event_name.interface.interface_normalized_event_name_resolver', - '@gember.event_sourcing.resolver.domain_event.normalized_event_name.class_name.class_name_normalized_event_name_resolver' - ] - - gember.event_sourcing.resolver.domain_event.normalized_event_name.attribute.attribute_normalized_event_name_resolver: - class: Gember\EventSourcing\Resolver\DomainEvent\NormalizedEventName\Attribute\AttributeNormalizedEventNameResolver - arguments: - - '@gember.event_sourcing.util.attribute.resolver.attribute_resolver' - - gember.event_sourcing.resolver.domain_event.normalized_event_name.interface.interface_normalized_event_name_resolver: - class: Gember\EventSourcing\Resolver\DomainEvent\NormalizedEventName\Interface\InterfaceNormalizedEventNameResolver - - gember.event_sourcing.resolver.domain_event.normalized_event_name.class_name.class_name_normalized_event_name_resolver: - class: Gember\EventSourcing\Resolver\DomainEvent\NormalizedEventName\ClassName\ClassNameNormalizedEventNameResolver - arguments: - - '@gember.event_sourcing.util.string.friendly_class_namer.friendly_class_namer' - gember.event_sourcing.util.attribute.resolver.attribute_resolver: class: Gember\EventSourcing\Util\Attribute\Resolver\Reflector\ReflectorAttributeResolver - gember.event_sourcing.util.resolver.cached.cached_attribute_resolver_decorator: - class: Gember\EventSourcing\Util\Attribute\Resolver\Cached\CachedAttributeResolverDecorator - #decorates: gember.event_sourcing.util.attribute.resolver.attribute_resolver - arguments: - - '@.inner' - - '@gember.event_sourcing.util.string.friendly_class_namer.friendly_class_namer' - - '@gember.psr.simple_cache.cache_interface' - gember.psr.simple_cache.cache_interface: '@gember.symfony.component.cache.psr16_cache' gember.symfony.component.cache.psr16_cache: @@ -240,5 +174,94 @@ services: class: Gember\EventSourcingSymfonyBundle\Listener\InitializeUseCaseAttributeRegistryListener tags: ['kernel.event_subscriber'] arguments: - - '@gember.event_sourcing.resolver.use_case.domain_tag_properties.domain_tag_properties_resolver' - - '@gember.event_sourcing.resolver.use_case.subscriber_method_for_event.subscriber_method_for_event_resolver' + - '@gember.event_sourcing.resolver.use_case.use_case_resolver' + + gember.event_sourcing.resolver.domain_event.domain_event_resolver: + class: Gember\EventSourcing\Resolver\DomainEvent\Default\DefaultDomainEventResolver + arguments: + - '@gember.event_sourcing.resolver.domain_event.default.event_name.event_name_resolver' + - '@gember.event_sourcing.resolver.common.domain_tag.domain_tag_resolver' + + gember.event_sourcing.resolver.domain_event.cached.cached_domain_event_resolver_decorator: + class: Gember\EventSourcing\Resolver\DomainEvent\Cached\CachedDomainEventResolverDecorator + #decorates: gember.event_sourcing.resolver.domain_event.domain_event_resolver + arguments: + - '@.inner' + - '@gember.psr.simple_cache.cache_interface' + - '@gember.event_sourcing.util.string.friendly_class_namer.friendly_class_namer' + + gember.event_sourcing.resolver.domain_event.default.event_name.event_name_resolver: + class: Gember\EventSourcing\Resolver\DomainEvent\Default\EventName\Stacked\StackedEventNameResolver + arguments: + - [ + '@gember.event_sourcing.resolver.domain_event.default.event_name.attribute.attribute_event_name_resolver', + '@gember.event_sourcing.resolver.domain_event.default.event_name.interface.interface_event_name_resolver' + ] + - '@gember.event_sourcing.resolver.domain_event.default.event_name.class_name.class_name_event_name_resolver' + + gember.event_sourcing.resolver.domain_event.default.event_name.class_name.class_name_event_name_resolver: + class: Gember\EventSourcing\Resolver\DomainEvent\Default\EventName\ClassName\ClassNameEventNameResolver + arguments: + - '@gember.event_sourcing.util.string.friendly_class_namer.friendly_class_namer' + + gember.event_sourcing.resolver.domain_event.default.event_name.attribute.attribute_event_name_resolver: + class: Gember\EventSourcing\Resolver\DomainEvent\Default\EventName\Attribute\AttributeEventNameResolver + arguments: + - '@gember.event_sourcing.util.attribute.resolver.attribute_resolver' + + gember.event_sourcing.resolver.domain_event.default.event_name.interface.interface_event_name_resolver: + class: Gember\EventSourcing\Resolver\DomainEvent\Default\EventName\Interface\InterfaceEventNameResolver + + gember.event_sourcing.resolver.common.domain_tag.domain_tag_resolver: + class: Gember\EventSourcing\Resolver\Common\DomainTag\Stacked\StackedDomainTagResolver + arguments: + - [ + '@gember.event_sourcing.resolver.common.domain_tag.attribute.attribute_domain_tag_resolver', + '@gember.event_sourcing.resolver.common.domain_tag.interface.interface_domain_tag_resolver' + ] + + gember.event_sourcing.resolver.common.domain_tag.attribute.attribute_domain_tag_resolver: + class: Gember\EventSourcing\Resolver\Common\DomainTag\Attribute\AttributeDomainTagResolver + arguments: + - '@gember.event_sourcing.util.attribute.resolver.attribute_resolver' + + gember.event_sourcing.resolver.common.domain_tag.interface.interface_domain_tag_resolver: + class: Gember\EventSourcing\Resolver\Common\DomainTag\Interface\InterfaceDomainTagResolver + + gember.event_sourcing.resolver.domain_command.domain_command_resolver: + class: Gember\EventSourcing\Resolver\DomainCommand\Default\DefaultDomainCommandResolver + arguments: + - '@gember.event_sourcing.resolver.common.domain_tag.domain_tag_resolver' + + gember.event_sourcing.resolver.domain_command.cached.cached_domain_command_resolver_decorator: + class: Gember\EventSourcing\Resolver\DomainCommand\Cached\CachedDomainCommandResolverDecorator + #decorates: gember.event_sourcing.resolver.domain_command.domain_command_resolver + arguments: + - '@.inner' + - '@gember.psr.simple_cache.cache_interface' + - '@gember.event_sourcing.util.string.friendly_class_namer.friendly_class_namer' + + gember.event_sourcing.resolver.use_case.default.command_handler.command_handler_resolver: + class: Gember\EventSourcing\Resolver\UseCase\Default\CommandHandler\Attribute\AttributeCommandHandlerResolver + arguments: + - '@gember.event_sourcing.util.attribute.resolver.attribute_resolver' + + gember.event_sourcing.resolver.use_case.default.event_subscriber.event_subscriber_resolver: + class: Gember\EventSourcing\Resolver\UseCase\Default\EventSubscriber\Attribute\AttributeEventSubscriberResolver + arguments: + - '@gember.event_sourcing.util.attribute.resolver.attribute_resolver' + + gember.event_sourcing.resolver.use_case.use_case_resolver: + class: Gember\EventSourcing\Resolver\UseCase\Default\DefaultUseCaseResolver + arguments: + - '@gember.event_sourcing.resolver.common.domain_tag.domain_tag_resolver' + - '@gember.event_sourcing.resolver.use_case.default.command_handler.command_handler_resolver' + - '@gember.event_sourcing.resolver.use_case.default.event_subscriber.event_subscriber_resolver' + + gember.event_sourcing.resolver.use_case.cached.cached_use_case_resolver_decorator: + class: Gember\EventSourcing\Resolver\UseCase\Cached\CachedUseCaseResolverDecorator + #decorates: gember.event_sourcing.resolver.use_case.use_case_resolver + arguments: + - '@.inner' + - '@gember.psr.simple_cache.cache_interface' + - '@gember.event_sourcing.util.string.friendly_class_namer.friendly_class_namer' \ No newline at end of file diff --git a/src/GemberEventSourcingBundle.php b/src/GemberEventSourcingBundle.php index 11f9008..2052039 100644 --- a/src/GemberEventSourcingBundle.php +++ b/src/GemberEventSourcingBundle.php @@ -115,8 +115,14 @@ public function loadExtension(array $config, ContainerConfigurator $container, C $services->get('gember.event_sourcing.registry.command_handler.cached.cached_command_handler_registry_decorator') ->decorate('gember.event_sourcing.registry.command_handler.command_handler_registry'); - $services->get('gember.event_sourcing.util.resolver.cached.cached_attribute_resolver_decorator') - ->decorate('gember.event_sourcing.util.attribute.resolver.attribute_resolver'); + $services->get('gember.event_sourcing.resolver.domain_event.cached.cached_domain_event_resolver_decorator') + ->decorate('gember.event_sourcing.resolver.domain_event.domain_event_resolver'); + + $services->get('gember.event_sourcing.resolver.domain_command.cached.cached_domain_command_resolver_decorator') + ->decorate('gember.event_sourcing.resolver.domain_command.domain_command_resolver'); + + $services->get('gember.event_sourcing.resolver.use_case.cached.cached_use_case_resolver_decorator') + ->decorate('gember.event_sourcing.resolver.use_case.use_case_resolver'); $cacheType = isset($config['cache']['psr16']) ? 'psr16' : 'psr6'; $cacheService = ltrim($config['cache'][$cacheType]['service'] ?? 'cache.app', '@'); diff --git a/src/Listener/InitializeUseCaseAttributeRegistryListener.php b/src/Listener/InitializeUseCaseAttributeRegistryListener.php index 10fbb30..e472a7c 100644 --- a/src/Listener/InitializeUseCaseAttributeRegistryListener.php +++ b/src/Listener/InitializeUseCaseAttributeRegistryListener.php @@ -4,9 +4,8 @@ namespace Gember\EventSourcingSymfonyBundle\Listener; +use Gember\EventSourcing\Resolver\UseCase\UseCaseResolver; use Gember\EventSourcing\UseCase\UseCaseAttributeRegistry; -use Gember\EventSourcing\Resolver\UseCase\DomainTagProperties\DomainTagsPropertiesResolver; -use Gember\EventSourcing\Resolver\UseCase\SubscriberMethodForEvent\SubscriberMethodForEventResolver; use Symfony\Component\Console\ConsoleEvents; use Symfony\Component\Console\Event\ConsoleCommandEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -17,8 +16,7 @@ final readonly class InitializeUseCaseAttributeRegistryListener implements EventSubscriberInterface { public function __construct( - private DomainTagsPropertiesResolver $domainTagPropertiesResolver, - private SubscriberMethodForEventResolver $subscriberMethodForEventResolver, + private UseCaseResolver $useCaseResolver, ) {} /** @@ -35,9 +33,6 @@ public static function getSubscribedEvents(): array public function onEvent(ConsoleCommandEvent|RequestEvent $event): void { - UseCaseAttributeRegistry::initialize( - $this->domainTagPropertiesResolver, - $this->subscriberMethodForEventResolver, - ); + UseCaseAttributeRegistry::initialize($this->useCaseResolver); } }