/** * @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(); }
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); }
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(); }