Exemplo n.º 1
0
 /**
  * @param string $identity
  * @return EventDescriptor[]
  */
 public function find(string $identity) : array
 {
     $cursor = $this->collection->find([$this->identityField => $identity]);
     return array_map(function (BSONDocument $eventData) : EventDescriptor {
         return EventDescriptor::reconstructFromArray($eventData->getArrayCopy());
     }, $cursor->toArray());
 }
Exemplo n.º 2
0
 /**
  * @param string $identity
  * @return EventDescriptor[]
  */
 public function find(string $identity) : array
 {
     if (!$this->contains($identity)) {
         return [];
     }
     return array_map(function (array $event) : EventDescriptor {
         return EventDescriptor::reconstructFromArray($event);
     }, $this->data[$identity]);
 }
Exemplo n.º 3
0
 /**
  * @param Identity $identity
  * @param EventStorage $eventStorage
  * @param Serializer $serializer
  */
 private function prepareSomeEvents(Identity $identity, EventStorage $eventStorage, Serializer $serializer)
 {
     // This is not the preferred way, but used for simplicity! You should use commands to achieve this.
     $event = new CreatedEvent($identity);
     $event->setVersion(1);
     $eventStorage->append(EventDescriptor::record($identity->getValue(), 'aggregateType', $event->getEventName(), $serializer->serialize($event), $event->getVersion()));
     $event = new DemonstratedEvent($identity);
     $event->setVersion(2);
     $eventStorage->append(EventDescriptor::record($identity->getValue(), 'aggregateType', $event->getEventName(), $serializer->serialize($event), $event->getVersion()));
 }
Exemplo n.º 4
0
 /**
  * @test
  */
 public function findIdentitiesWillRetrieveAllKnownIdentities()
 {
     $identity1 = 'someidentity';
     $identity2 = 'someotheridentity';
     $event1 = EventDescriptor::record($identity1, 'aggregateType', 'someevent', '{}', 1);
     $event2 = EventDescriptor::record($identity2, 'aggregateType', 'someevent', '{}', 1);
     $storage = new MemoryEventStorage();
     $storage->append($event1);
     $storage->append($event2);
     $identities = $storage->findIdentities();
     self::assertCount(2, $identities);
     self::assertContains($identity1, $identities);
     self::assertContains($identity2, $identities);
 }
Exemplo n.º 5
0
 /**
  * @test
  */
 public function findIdentitiesWillRetrieveAllKnownIdentities()
 {
     $collection = $this->getCollection();
     $identityField = 'identity';
     $identity1 = 'someidentity';
     $identity2 = 'someotheridentity';
     $event1 = EventDescriptor::record($identity1, 'aggregateType', 'someevent', '{}', 1);
     $event2 = EventDescriptor::record($identity2, 'aggregateType', 'someevent', '{}', 1);
     $storage = new MongoDbEventStorage($collection, $identityField);
     $storage->append($event1);
     $storage->append($event2);
     $identities = $storage->findIdentities();
     self::assertCount(2, $identities);
     self::assertContains($identity1, $identities);
     self::assertContains($identity2, $identities);
 }
Exemplo n.º 6
0
 /**
  * @test
  */
 public function getEventsForAggregateRetrievesEventLog()
 {
     $eventBus = $this->getEventBus();
     $storage = $this->getEventStorage();
     $serializer = $this->getSerializer();
     $eventMap = $this->getEventMap();
     $aggregateId = Identity::createNew();
     $descriptors = [EventDescriptor::reconstructFromArray(['identity' => $aggregateId->getValue(), 'type' => 'aggregateType', 'event' => EventStoreTest_Event1::getName(), 'payload' => '{}', 'playHead' => 1, 'recorded' => date('r')]), EventDescriptor::reconstructFromArray(['identity' => $aggregateId->getValue(), 'type' => 'aggregateType', 'event' => EventStoreTest_Event2::getName(), 'payload' => '{}', 'playHead' => 2, 'recorded' => date('r')])];
     $eventMap->expects(self::exactly(count($descriptors)))->method('getClassByEventName')->willReturnOnConsecutiveCalls(EventStoreTest_Event1::class, EventStoreTest_Event2::class);
     $storage->expects(self::once())->method('contains')->willReturn(true);
     $storage->expects(self::once())->method('find')->with($aggregateId->getValue())->willReturn($descriptors);
     $serializer->expects(self::exactly(count($descriptors)))->method('deserialize')->willReturnOnConsecutiveCalls(new EventStoreTest_Event1(), new EventStoreTest_Event2());
     $eventStore = new EventStore($eventBus, $storage, $serializer, $eventMap);
     $events = $eventStore->getEventsForAggregate($aggregateId);
     self::assertCount(count($descriptors), $events->getIterator());
 }
Exemplo n.º 7
0
 /**
  * @param Identity $aggregateId
  * @param string $aggregateType
  * @param Event $event
  */
 private function saveEvent(Identity $aggregateId, string $aggregateType, Event $event)
 {
     $eventData = EventDescriptor::record($aggregateId->getValue(), $aggregateType, $event->getEventName(), $this->serializer->serialize($event), $event->getVersion());
     $this->storage->append($eventData);
 }