1717use CloudCreativity \Modules \Contracts \Domain \Events \DomainEvent ;
1818use CloudCreativity \Modules \Contracts \Domain \Events \OccursImmediately ;
1919use CloudCreativity \Modules \Contracts \Toolkit \Pipeline \PipeContainer ;
20+ use Psr \Container \ContainerInterface ;
21+ use Psr \Log \LoggerInterface ;
2022
2123class UnitOfWorkAwareDispatcher extends Dispatcher
2224{
2325 public function __construct (
2426 private readonly UnitOfWorkManager $ unitOfWorkManager ,
25- IListenerContainer $ listeners = new ListenerContainer (),
27+ ContainerInterface | IListenerContainer $ listeners = new ListenerContainer (),
2628 ?PipeContainer $ middleware = null ,
29+ private readonly ?LoggerInterface $ logger = null ,
2730 ) {
2831 parent ::__construct ($ listeners , $ middleware );
2932 }
@@ -46,14 +49,30 @@ public function dispatch(DomainEvent $event): void
4649 protected function execute (DomainEvent $ event , EventHandler $ listener ): void
4750 {
4851 if ($ listener ->beforeCommit ()) {
49- $ this ->unitOfWorkManager ->beforeCommit (static function () use ($ event , $ listener ): void {
52+ $ this ->logger ?->debug('Deferring listener to be handled before commit. ' , [
53+ 'event ' => $ event ::class,
54+ 'listener ' => (string ) $ listener ,
55+ ]);
56+ $ this ->unitOfWorkManager ->beforeCommit (function () use ($ event , $ listener ): void {
57+ $ this ->logger ?->debug('Executing listener before commit. ' , [
58+ 'event ' => $ event ::class,
59+ 'listener ' => (string ) $ listener ,
60+ ]);
5061 $ listener ($ event );
5162 });
5263 return ;
5364 }
5465
5566 if ($ listener ->afterCommit ()) {
56- $ this ->unitOfWorkManager ->afterCommit (static function () use ($ event , $ listener ): void {
67+ $ this ->logger ?->debug('Deferring listener to be handled after commit. ' , [
68+ 'event ' => $ event ::class,
69+ 'listener ' => (string ) $ listener ,
70+ ]);
71+ $ this ->unitOfWorkManager ->afterCommit (function () use ($ event , $ listener ): void {
72+ $ this ->logger ?->debug('Executing listener after commit. ' , [
73+ 'event ' => $ event ::class,
74+ 'listener ' => (string ) $ listener ,
75+ ]);
5776 $ listener ($ event );
5877 });
5978 return ;
0 commit comments