/** * @param UnitOfWork $unitOfWork * @param Contract $aggregateRootType * * @return AggregateRootRepository */ public function create(UnitOfWork $unitOfWork, Contract $aggregateRootType) { $repository = new AggregateRootRepository($unitOfWork, $aggregateRootType, $this->eventStore, $this->eventBus, $this->aggregateRootFactory); if (null === $this->saveAggregateCallbackFactory) { $saveCallbackFactory = new SimpleSaveAggregateCallbackFactory($repository); $repository->setSaveAggregateCallbackFactory($saveCallbackFactory); } else { $repository->setSaveAggregateCallbackFactory($this->saveAggregateCallbackFactory); } return $repository; }
/** * @expectedException \RayRutjes\DomainFoundation\Repository\ConflictingAggregateVersionException */ public function testShouldEnsureTheLoadedAggregateRootMatchesTheExpectedVersion() { $identifier = new AggregateRootIdentifierStub('identifier'); $event = new GenericEvent($identifier, 1, MessageIdentifier::generate(), new Created($identifier)); $this->eventStore->method('read')->willReturn(new GenericEventStream([$event])); $this->repository->load($identifier, 0); }
/** * @param AggregateRoot $aggregate */ public function save(AggregateRoot $aggregate) { $this->repository->doSave($aggregate); $aggregate->commitChanges(); }
/** * @param UserIdentifier $userIdentifier * @param null $expectedVersion * * @return User */ public function load(UserIdentifier $userIdentifier, $expectedVersion = null) { return $this->repository->load($userIdentifier, $expectedVersion); }