コード例 #1
0
ファイル: Repository.php プロジェクト: pborreli/eidetic
 /**
  * @param EventSourcedEntity $eventSourcedEntity
  *
  * @throws VersionMismatchException
  */
 private function enforceVersionMismatchConstraint(EventSourcedEntity $eventSourcedEntity)
 {
     /** @var EventSourcedEntity $databaseVersion */
     $databaseVersion = $this->load($eventSourcedEntity->identifier());
     if ($databaseVersion->version() !== $eventSourcedEntity->version()) {
         throw new VersionMismatchException('Local entity is at version ' . $eventSourcedEntity->version() . ' and database is at ' . $databaseVersion->version());
     }
 }
コード例 #2
0
 /**
  * @param EventSourcedEntity $eventSourcedEntity
  *
  * @throws InvalidEventException
  */
 protected function persist(EventSourcedEntity $eventSourcedEntity, $event)
 {
     if (false === array_key_exists($eventSourcedEntity->identifier(), $this->events)) {
         $this->events[$eventSourcedEntity->identifier()] = [];
     }
     $this->events[$eventSourcedEntity->identifier()][] = ['entity_identifier' => $eventSourcedEntity->identifier(), 'serial_number' => count($this->events[$eventSourcedEntity->identifier()]) + 1, 'entity_class' => get_class($eventSourcedEntity), 'recorded_at' => new \DateTime('now', new \DateTimeZone('UTC')), 'event_class' => get_class($event), 'event' => $this->serialize($event)];
     array_push($this->stagedEvents, $event);
 }
コード例 #3
0
ファイル: EventStore.php プロジェクト: pborreli/eidetic
 /**
  * @param EventSourcedEntity $eventSourcedEntity [description]
  *
  * @throws InvalidEventException
  */
 private function enforceEventIntegrity(EventSourcedEntity $eventSourcedEntity)
 {
     foreach ($eventSourcedEntity->stagedEvents() as $event) {
         $this->verifyEventIsAClass($event);
     }
 }
コード例 #4
0
 /**
  * @param string             $eventHook
  * @param EventSourcedEntity $eventSourcedEntity
  */
 public function publishAll($eventHook, EventSourcedEntity $eventSourcedEntity)
 {
     foreach ($eventSourcedEntity->stagedEvents() as $event) {
         $this->publish($eventHook, $eventSourcedEntity, $event);
     }
 }
コード例 #5
0
ファイル: DBALEventStore.php プロジェクト: pborreli/eidetic
 /**
  * @param EventSourcedEntity $eventSourcedEntity
  */
 protected function persist(EventSourcedEntity $eventSourcedEntity, $event)
 {
     $eventCount = $this->countEntityEvents($eventSourcedEntity->identifier());
     $this->connection->insert($this->tableName, ['entity_identifier' => $eventSourcedEntity->identifier(), 'serial_number' => ++$eventCount, 'entity_class' => get_class($eventSourcedEntity), 'recorded_at' => new \DateTime('now', new \DateTimeZone('UTC')), 'event_class' => get_class($event), 'event' => $this->serialize($event)], [\PDO::PARAM_STR, \PDO::PARAM_INT, \PDO::PARAM_STR, 'datetime', \PDO::PARAM_STR, \PDO::PARAM_STR]);
     array_push($this->stagedEvents, $event);
 }