Exemple #1
0
 /**
  * Process the given aggregate-command, hence build the corresponding aggregate-event.
  *
  * @param CommandInterface $command
  * @param array $custom_event_state
  *
  * @return EmbeddedEntityEventInterface
  */
 protected function processEmbeddedEntityCommand(CommandInterface $command, array $custom_event_state = [])
 {
     $event_class = $command->getEventClass();
     $attribute_name = $command->getParentAttributeName();
     $event_state = ['parent_attribute_name' => $attribute_name, 'embedded_entity_type' => $command->getEmbeddedEntityType()];
     if ($command instanceof RemoveEmbeddedEntityCommand) {
         $event_state['embedded_entity_identifier'] = $command->getEmbeddedEntityIdentifier();
     } elseif ($command instanceof AddEmbeddedEntityCommand) {
         $create_data = $command->getValues();
         if (!isset($create_data['identifier'])) {
             $create_data['identifier'] = UuidAttribute::generateVersion4();
         }
         $event_state = array_merge($event_state, ['data' => $create_data, 'position' => $command->getPosition(), 'embedded_entity_identifier' => $create_data['identifier']]);
     } elseif ($command instanceof ModifyEmbeddedEntityCommand) {
         $event_state = array_merge($event_state, ['data' => $command->getValues(), 'position' => $command->getPosition(), 'embedded_entity_identifier' => $command->getEmbeddedEntityIdentifier()]);
     }
     $embedded_entity_events = new EmbeddedEntityEventList();
     foreach ($command->getEmbeddedEntityCommands() as $embedded_command) {
         $embedded_entity_events->push($this->processEmbeddedEntityCommand($embedded_command));
     }
     $event_state['embedded_entity_events'] = $embedded_entity_events;
     return new $event_class($event_state);
 }