/** * {@inheritdoc} */ public static function deserialize(array $data) : QueryMessage { $keys = ['id', 'type', 'timestamp', 'meta_data', 'payload_type', 'payload']; foreach ($keys as $key) { if (!isset($data[$key])) { $message = sprintf('Invalid serialization data: %s', VarPrinter::toString($data)); throw new DomainException($message); } } if ($data['type'] !== MessageType::QUERY) { $message = sprintf('Invalid message type: %s', $data['type']); throw new DomainException($message); } /** @var MessageId $id */ $id = MessageId::fromString($data['id']); /** @var DateTime $timestamp */ $timestamp = DateTime::fromString($data['timestamp']); /** @var MetaData $metaData */ $metaData = MetaData::create($data['meta_data']); /** @var Type $payloadType */ $payloadType = Type::create($data['payload_type']); /** @var string $payloadClass */ $payloadClass = $payloadType->toClassName(); assert(Validate::implementsInterface($payloadClass, Query::class), sprintf('Unable to deserialize: %s', $payloadClass)); /** @var Query $payload */ $payload = $payloadClass::fromArray($data['payload']); return new static($id, $timestamp, $payload, $metaData); }
public function setUp() { $this->thingId = ThingId::fromString('014ec11d-2f21-4d33-a624-5df1196a4f85'); $this->thingType = Type::create(Thing::class); $this->metaData = new MetaData(['ip_address' => '127.0.0.1']); $this->committed = 3; $this->version = 6; }
/** * Constructs CommandMessage * * @param MessageId $messageId The message ID * @param DateTime $timestamp The timestamp * @param Command $payload The payload * @param MetaData $metaData The meta data */ public function __construct(MessageId $messageId, DateTime $timestamp, Command $payload, MetaData $metaData) { $this->messageId = $messageId; $this->timestamp = $timestamp; $this->payload = $payload; $this->payloadType = Type::create($payload); $this->metaData = $metaData; }
/** * Constructs BaseMessage * * @param MessageId $id The message ID * @param MessageType $type The message type * @param DateTime $timestamp The timestamp * @param Payload $payload The payload * @param MetaData $metaData The meta data */ protected function __construct(MessageId $id, MessageType $type, DateTime $timestamp, Payload $payload, MetaData $metaData) { $this->id = $id; $this->type = $type; $this->timestamp = $timestamp; $this->payload = $payload; $this->payloadType = Type::create($payload); $this->metaData = $metaData; }
/** * Constructs EventMessage * * @param Identifier $aggregateId The aggregate ID * @param Type $aggregateType The aggregate type * @param MessageId $messageId The message ID * @param DateTime $timestamp The timestamp * @param DomainEvent $payload The payload * @param MetaData $metaData The meta data * @param int $sequence The sequence number */ public function __construct(Identifier $aggregateId, Type $aggregateType, MessageId $messageId, DateTime $timestamp, DomainEvent $payload, MetaData $metaData, $sequence) { $this->aggregateId = $aggregateId; $this->aggregateType = $aggregateType; $this->messageId = $messageId; $this->timestamp = $timestamp; $this->payload = $payload; $this->payloadType = Type::create($payload); $this->metaData = $metaData; $this->sequence = (int) $sequence; }
public function setUp() { $thingId = ThingId::fromString('014ec11d-2f21-4d33-a624-5df1196a4f85'); $thingType = Type::create(Thing::class); $messageId = MessageId::fromString('014ec11e-4343-49cd-9b7a-cdd4ced5cedc'); $timestamp = DateTime::fromString('2015-01-01T13:12:31.045234[America/Chicago]'); $payload = new ThingHappenedEvent('foo', 'bar'); $metaData = new MetaData(['ip_address' => '127.0.0.1']); $sequence = 0; $this->eventMessage = new DomainEventMessage($thingId, $thingType, $messageId, $timestamp, $payload, $metaData, $sequence); $this->storedEvent = new StoredEvent($this->eventMessage); }
public function test_that_event_is_dispatched_to_attached_service() { $dispatcher = $this->container->get('event.dispatcher'); $dispatcher->attachService('test.subscriber', TestSubscriber::class); $dispatcher = new FrozenDispatcher($dispatcher); $thingId = ThingId::fromString('014ec11d-2f21-4d33-a624-5df1196a4f85'); $thingType = Type::create(Thing::class); $messageId = MessageId::fromString('014ec11e-4343-49cd-9b7a-cdd4ced5cedc'); $timestamp = DateTime::fromString('2015-01-01T13:12:31.045234[America/Chicago]'); $payload = new ThingHappenedEvent('foo', 'bar'); $metaData = new MetaData(); $sequence = 0; $eventMessage = new DomainEventMessage($thingId, $thingType, $messageId, $timestamp, $payload, $metaData, $sequence); $dispatcher->dispatch($eventMessage); $this->assertTrue($this->container->get('test.subscriber')->thingHappened()); }
public function test_that_all_events_key_subscribes_to_any_event() { $subscriber = new EventLogSubscriber(); $this->dispatcher->attach($subscriber); $thingId = ThingId::fromString('014ec11d-2f21-4d33-a624-5df1196a4f85'); $thingType = Type::create(Thing::class); $messageId = MessageId::fromString('014ec11e-4343-49cd-9b7a-cdd4ced5cedc'); $timestamp = DateTime::fromString('2015-01-01T13:12:31.045234[America/Chicago]'); $payload = new ThingHappenedEvent('foo', 'bar'); $metaData = new MetaData(); $sequence = 0; $eventMessage = new DomainEventMessage($thingId, $thingType, $messageId, $timestamp, $payload, $metaData, $sequence); $this->dispatcher->dispatch($eventMessage); $logs = $subscriber->getLogs(); $expected = '{"message_id":"014ec11e-4343-49cd-9b7a-cdd4ced5cedc",' . '"timestamp":"2015-01-01T13:12:31.045234[America/Chicago]",' . '"event_type":"Novuso.Test.Common.Doubles.Domain.Messaging.Event.ThingHappenedEvent",' . '"event_data":{"foo":"foo","bar":"bar"},"meta_data":[],' . '"aggregate_type":"Novuso.Test.Common.Doubles.Domain.Model.Thing",' . '"aggregate_id":"014ec11d-2f21-4d33-a624-5df1196a4f85","sequence":0}'; $this->assertSame($expected, $logs[0]); }
/** * Checks if a handler is defined for a command * * @param string $commandClass The full command class name * * @return bool */ public function hasHandler(string $commandClass) : bool { $type = Type::create($commandClass)->toString(); return isset($this->handlers[$type]); }
/** * Checks if a handler is defined for a query * * @param string $queryClass The full query class name * * @return bool */ public function hasHandler($queryClass) { $type = Type::create($queryClass)->toString(); return isset($this->handlers[$type]); }
/** * Retrieves the event collection * * @return EventCollection */ protected function eventCollection() { if ($this->eventCollection === null) { $this->eventCollection = new EventCollection($this->id(), Type::create($this)); } return $this->eventCollection; }
public function test_that_hash_value_returns_expected_string() { $type = Type::create($this); $expected = str_replace('\\', '.', get_class($this)); $this->assertSame($expected, $type->hashValue()); }
/** * Checks if a responder is defined for an action * * @param string $actionClass The full action class name * * @return bool */ public function hasResponder($actionClass) { $type = Type::create($actionClass)->toString(); return isset($this->responders[$type]); }
/** * Checks if a responder is defined for an action * * @param string $actionClass The full action class name * * @return bool */ public function hasResponder($actionClass) { $type = Type::create($actionClass)->toString(); if (!isset($this->responders[$type])) { return false; } $serviceId = $this->responders[$type]; return $this->container->has($serviceId); }
/** * Creates a view for the current request * * @param mixed $data The domain data * @param array $parameters Additional parameters * * @return View */ protected function view($data = null, array $parameters = []) { $action = Type::create($this); return new View($this->request, $action, $data, $parameters); }
public function setUp() { $thingId = ThingId::fromString('014ec11d-2f21-4d33-a624-5df1196a4f85'); $thingType = Type::create(Thing::class); $this->eventCollection = new EventCollection($thingId, $thingType); }
/** * Checks if a handler is defined for a command * * @param string $commandClass The full command class name * * @return bool */ public function hasHandler($commandClass) { $type = Type::create($commandClass)->toString(); if (!isset($this->handlers[$type])) { return false; } $serviceId = $this->handlers[$type]; return $this->container->has($serviceId); }
protected function getNextEvent() { $thingId = ThingId::fromString('014ec11d-2f21-4d33-a624-5df1196a4f85'); $thingType = Type::create(Thing::class); $messageId = MessageId::fromString('014ec11f-317e-475a-9d5f-b8ae6c20aab1'); $timestamp = DateTime::fromString('2015-01-02T10:34:12.672291[America/Chicago]'); $metaData = new MetaData(); $payload = new ThingHappenedEvent('foo', 'bar'); $sequence = 1; return new DomainEventMessage($thingId, $thingType, $messageId, $timestamp, $payload, $metaData, $sequence); }
/** * @expectedException Novuso\Common\Domain\EventStore\Exception\StreamNotFoundException */ public function test_that_load_stream_throws_exception_when_id_does_not_have_a_stream() { $task = Task::create('First task description'); $stream = $task->getRecordedEvents(); $this->store->appendStream($stream); $task->clearRecordedEvents(); $other = Task::create('Another task'); $this->store->loadStream($other->id(), Type::create($other)); }
/** * Checks if a handler is defined for a query * * @param string $queryClass The full query class name * * @return bool */ public function hasHandler(string $queryClass) : bool { $type = Type::create($queryClass)->toString(); if (!isset($this->handlers[$type])) { return false; } $service = $this->handlers[$type]; return $this->container->has($service); }
/** * Converts data to an event message * * @return EventMessage */ public function toEventMessage() { $aggregateIdClass = Type::create($this->aggregateIdType)->toClassName(); $aggregateId = $aggregateIdClass::fromString($this->aggregateId); $aggregateType = Type::create($this->aggregateType); $messageId = MessageId::fromString($this->messageId); $timestamp = DateTime::fromString($this->timestamp); $payload = unserialize($this->payload); $metaData = unserialize($this->metaData); $sequence = $this->sequence; $message = new DomainEventMessage($aggregateId, $aggregateType, $messageId, $timestamp, $payload, $metaData, $sequence); return $message; }