repository = $repository ?? new EventQueueRepository(); } /** * Dispatch an event asynchronously (enqueue for later processing). * * @param Event $event The event to dispatch. * @return int|false Queue record ID or false on failure. */ public function dispatch( Event $event ) { $event_name = $event->getName(); $payload = $event->getPayload(); $payload['event_class'] = get_class( $event ); $payload_json = wp_json_encode( $payload ); $id = $this->repository->enqueue( $event_name, $payload_json ); if ( false !== $id ) { Log::info( 'Event queued for async processing', array( 'event' => $event_name, 'queue_id' => $id, ) ); ExecutionBootstrap::request_tick(); } return $id; } }