diff --git a/Neos.ContentRepository.StructureAdjustment/src/StructureAdjustmentService.php b/Neos.ContentRepository.StructureAdjustment/src/StructureAdjustmentService.php index 51cdaeade4..31d17b56a6 100644 --- a/Neos.ContentRepository.StructureAdjustment/src/StructureAdjustmentService.php +++ b/Neos.ContentRepository.StructureAdjustment/src/StructureAdjustmentService.php @@ -9,13 +9,13 @@ use Neos\ContentRepository\Core\EventStore\DecoratedEvent; use Neos\ContentRepository\Core\EventStore\EventInterface; use Neos\ContentRepository\Core\EventStore\EventNormalizer; -use Neos\ContentRepository\Core\EventStore\Events; use Neos\ContentRepository\Core\EventStore\EventsToPublish; use Neos\ContentRepository\Core\Factory\ContentRepositoryServiceInterface; use Neos\ContentRepository\Core\Infrastructure\Property\PropertyConverter; use Neos\ContentRepository\Core\NodeType\NodeTypeManager; use Neos\ContentRepository\Core\NodeType\NodeTypeName; use Neos\ContentRepository\Core\Projection\ContentGraph\ContentGraphInterface; +use Neos\ContentRepository\Core\SharedModel\Id\UuidFactory; use Neos\ContentRepository\Core\SharedModel\Workspace\WorkspaceName; use Neos\ContentRepository\Core\Subscription\Engine\SubscriptionEngine; use Neos\ContentRepository\StructureAdjustment\Adjustment\DimensionAdjustment; @@ -25,8 +25,8 @@ use Neos\ContentRepository\StructureAdjustment\Adjustment\TetheredNodeAdjustments; use Neos\ContentRepository\StructureAdjustment\Adjustment\UnknownNodeTypeAdjustment; use Neos\EventStore\EventStoreInterface; -use Neos\EventStore\Model\Event\EventId; -use Neos\EventStore\Model\Event\EventMetadata; +use Neos\EventStore\Model\Event\CorrelationId; +use Neos\EventStore\Model\Events; class StructureAdjustmentService implements ContentRepositoryServiceInterface { @@ -114,16 +114,26 @@ public function fixError(StructureAdjustment $adjustment): void $eventsToPublish = $remediation(); assert($eventsToPublish instanceof EventsToPublish); - $eventsWithMetaData = self::eventsWithCausationOfFirstEventAndAdditionalMetaData( - $eventsToPublish->events, - EventMetadata::fromArray([ - 'structureAdjustment' => mb_strimwidth($adjustment->render() , 0, 250, '…') - ]) - ); + // set correlation id and add debug metadata + $correlationId = CorrelationId::fromString(UuidFactory::create()); + $isFirstEvent = true; + $normalizedEvents = Events::fromArray($eventsToPublish->events->map(function (EventInterface|DecoratedEvent $event) use ( + &$isFirstEvent, $correlationId, $adjustment + ) { + $metadata = $event instanceof DecoratedEvent ? $event->eventMetadata?->value ?? [] : []; + if ($isFirstEvent) { + $metadata['debug_structureAdjustment'] = mb_strimwidth($adjustment->render() , 0, 250, '…'); + $isFirstEvent = false; + } + $decoratedEvent = DecoratedEvent::create( + event: $event, + metadata: $metadata, + correlationId: $correlationId, + ); + + return $this->eventNormalizer->normalize($decoratedEvent); + })); - $normalizedEvents = \Neos\EventStore\Model\Events::fromArray( - $eventsWithMetaData->map($this->eventNormalizer->normalize(...)) - ); $this->eventStore->commit( $eventsToPublish->streamName, $normalizedEvents, @@ -131,24 +141,4 @@ public function fixError(StructureAdjustment $adjustment): void ); $this->subscriptionEngine->catchUpActive(); } - - private static function eventsWithCausationOfFirstEventAndAdditionalMetaData(Events $events, EventMetadata $metadata): Events - { - /** @var non-empty-list $restEvents */ - $restEvents = iterator_to_array($events); - $firstEvent = array_shift($restEvents); - - if ($firstEvent instanceof DecoratedEvent && $firstEvent->eventMetadata) { - $metadata = EventMetadata::fromArray(array_merge($firstEvent->eventMetadata->value, $metadata->value)); - } - - $decoratedFirstEvent = DecoratedEvent::create($firstEvent, eventId: EventId::create(), metadata: $metadata); - - $decoratedRestEvents = []; - foreach ($restEvents as $event) { - $decoratedRestEvents[] = DecoratedEvent::create($event, causationId: $decoratedFirstEvent->eventId); - } - - return Events::fromArray([$decoratedFirstEvent, ...$decoratedRestEvents]); - } }