/**
  * @param Event $event
  * @return Projection[]
  */
 private function projectionsForEvent(Event $event) : array
 {
     if (!isset($this->projectionsForEvent[$event->getName()])) {
         return [];
     }
     return $this->projectionsForEvent[$event->getName()];
 }
 /**
  * @param Event $event
  * @return EventSubscriber[]
  */
 private function subscribersForEvent(Event $event) : array
 {
     if (!isset($this->subscribersByEvent[$event->getName()])) {
         return [];
     }
     return $this->subscribersByEvent[$event->getName()];
 }
 public function notify(Event $event)
 {
     if (!$event instanceof InvoiceIssued) {
         return;
     }
     $seller = $event->getSeller();
     $readModel = $this->loadReadModel();
     if (!isset($readModel[(string) $seller->getTaxIdNumber()])) {
         $readModel[(string) $seller->getTaxIdNumber()] = $this->initializeReadModelFor($seller);
     }
     $readModel[(string) $seller->getTaxIdNumber()]['issuedInvoices']++;
     file_put_contents($this->jsonReportPath, json_encode($readModel));
 }
 function it_allows_to_reload_all_registered_projections(Projection $projection1, Projection $projection2, EventSubscribers $subscribers, Event $event, Event $secondEvent)
 {
     $subscribers->registerSubscriber(Argument::cetera())->willReturn();
     $this->registerProjection('EventNameOccurred', $projection1);
     $this->registerProjection('EventNameOccurred', $projection2);
     $event->getName()->willReturn('EventNameOccurred');
     $secondEvent->getName()->willReturn('OtherEventOccurred');
     $this->clear();
     $this->notify(new EventStream(new EventStream\Name('test'), [$event->getWrappedObject(), $secondEvent->getWrappedObject()]));
     $projection1->clear()->shouldHaveBeenCalled();
     $projection2->clear()->shouldHaveBeenCalled();
     $projection1->notify($event)->shouldHaveBeenCalled();
     $projection2->notify($event)->shouldHaveBeenCalled();
 }
Example #5
0
 function let(Event $firstEvent, Event $secondEvent)
 {
     $firstEvent->occurredOn()->willReturn(new \DateTimeImmutable('-1 minute'));
     $secondEvent->occurredOn()->willReturn(new \DateTimeImmutable('now'));
     $this->beConstructedWith(new EventStream\Name('test'), [$firstEvent, $secondEvent]);
 }
 private function insertEvent(EventStream\Name $streamName, Event $event)
 {
     $this->connection->insert(SchemaManager::normalizeToTableName($streamName), ['aggregate_id' => (string) $event->getAggreagateRootId(), 'name' => $event->getName(), 'occurred_on' => $event->occurredOn(), 'event' => $this->serializer->serialize($event), 'event_class' => get_class($event)], [\PDO::PARAM_STR, \PDO::PARAM_STR, 'datetime', 'text', \PDO::PARAM_STR]);
 }
 function it_working_with_not_registered_event_as_well(Event $event)
 {
     $event->getName()->willReturn('OtherEventOccured');
     $this->notify($event);
 }
Example #8
0
 function it_notify_subcribers_registered_for_given_event(Event $event, EventSubscriber $someEventOccuredSubcriber)
 {
     $event->getName()->willReturn('SomeEventOccured');
     $this->notify(new EventStream(new EventStream\Name('test'), [$event->getWrappedObject()]));
     $someEventOccuredSubcriber->notify($event)->shouldHaveBeenCalled();
 }