public void PossibleToLoadFromEvents()
        {
            var user = AggregateCreator.CreateAggregateRoot <User>();

            var created = new UserCreatedEvent()
            {
                UserId    = "3333",
                Email     = "*****@*****.**",
                FirstName = "John",
                LastName  = "Melinda"
            };

            var changed = new UserNameChangedEvent()
            {
                UserId    = "3333",
                FirstName = "John Jr.",
                LastName  = "Melinda III"
            };

            user.LoadFromEvents(new List <IEvent> {
                created, changed
            });

            Assert.AreEqual(user.Id, created.UserId);
            Assert.AreEqual(user.Version, 1);
            Assert.AreEqual(GetPrivateValue <String>(user, "_firstName"), changed.FirstName);
            Assert.AreEqual(GetPrivateValue <String>(user, "_lastName"), changed.LastName);
            Assert.AreEqual(GetPrivateValue <String>(user, "_email"), created.Email);
        }
Example #2
0
        public TAggregateRoot Create <TAggregateRoot>()
            where TAggregateRoot : IProcess
        {
            var aggregate = AggregateCreator.CreateAggregateRoot <TAggregateRoot>();

/*             var aggregateInterface = typeof(TAggregateRoot).GetInterface(typeof(IAggregateRoot<,>).FullName);
 *
 *           var args = aggregateInterface.GetGenericArguments();
 *           var aggregateStateType = args[1];
 *           var state = (IAggregateState) Activator.CreateInstance(aggregateStateType);
 *
 *           aggregate.Initialize(state);*/

            return(aggregate);
        }
Example #3
0
        public TAggregate GetById <TAggregate>(String id)
            where TAggregate : AggregateRoot
        {
            if (String.IsNullOrEmpty(id))
            {
                throw new ArgumentException("Aggregate id was not specified.");
            }

            var stream = _transitionStorage.OpenStream(id);

            var obj = AggregateCreator.CreateAggregateRoot <TAggregate>();

            obj.LoadFromTransitionStream(stream);
            return(obj);
        }
Example #4
0
        public TAggregate GetById <TAggregate>(String id)
            where TAggregate : Aggregate
        {
            if (String.IsNullOrEmpty(id))
            {
                throw new ArgumentException(String.Format(
                                                "Aggregate ID was not specified when trying to get by id {0} aggregate", typeof(TAggregate).FullName));
            }

            var transitions = _transitionStorage.GetTransitions(id, 0, int.MaxValue);

            var aggregate = AggregateCreator.CreateAggregateRoot <TAggregate>();
            var state     = AggregateCreator.CreateAggregateState(typeof(TAggregate));

            StateSpooler.Spool((AggregateState)state, transitions);
            aggregate.Setup(state, transitions.Count == 0 ? 0 : transitions.Last().Id.Version);

            return(aggregate);
        }
        public TAggregate GetById <TAggregate>(String id)
            where TAggregate : AggregateRoot
        {
            if (String.IsNullOrEmpty(id))
            {
                throw new ArgumentException("Aggregate id was not specified.");
            }
            Snapshot snapshot = null;

            if (_snapshotRepository != null)
            {
                snapshot = _snapshotRepository.Load <TAggregate>(id);
            }
            var obj = snapshot == null
                ? AggregateCreator.CreateAggregateRoot <TAggregate>()
                : (TAggregate)snapshot.Payload;

            var fromVersion = snapshot == null ? 0 : snapshot.StreamVersion + 1;
            var stream      = _transitionStorage.OpenStream(id, fromVersion, int.MaxValue);

            obj.LoadFromTransitionStream(stream);
            return(obj);
        }