public IEnumerable <AggregateCommit> Apply(AggregateCommit current)
        {
            if (ShouldApply(current))
            {
                var tenantUrn = new TenantUrn(Encoding.UTF8.GetString(current.AggregateRootId).ToLowerInvariant());
                var fooId     = new FooId(tenantUrn.Parts[3], tenantUrn.Tenant);
                LoadFromEventStore(fooId);
                aggregateMaxRevision[fooId]++;

                var newFooEvents = new List <IEvent>();
                foreach (IEvent @event in current.Events)
                {
                    if (@event.GetType() == typeof(TestCreateEventBar))
                    {
                        newFooEvents.Add(new TestCreateEventFoo(fooId));
                    }
                    else if (@event.GetType() == typeof(TestUpdateEventBar))
                    {
                        var theEvent = @event as TestUpdateEventBar;
                        newFooEvents.Add(new TestUpdateEventFoo(fooId, theEvent.UpdatedFieldValue));
                    }
                }
                var aggregateCommitFooBar = new AggregateCommit(fooId.RawId, current.BoundedContext, aggregateMaxRevision[fooId], newFooEvents);
                yield return(aggregateCommitFooBar);
            }
            else
            {
                yield return(current);
            }
        }
Beispiel #2
0
        public IEnumerable <AggregateCommit> Apply(AggregateCommit current)
        {
            if (ShouldApply(current))
            {
                var    tenantUrn            = new TenantUrn(Encoding.UTF8.GetString(current.AggregateRootId).ToLowerInvariant());
                string currentAggregateName = tenantUrn.Parts[2];

                if (currentAggregateName == targetAggregateFoo)
                {
                    var fooBarId        = new FooBarId("1234", "elders");
                    var newFooBarEvents = new List <IEvent>();
                    foreach (IEvent @event in current.Events)
                    {
                        if (@event.GetType() == typeof(TestCreateEventFoo))
                        {
                            newFooBarEvents.Add(new TestCreateEventFooBar(fooBarId));
                        }
                        else if (@event.GetType() == typeof(TestUpdateEventFoo))
                        {
                            var theEvent = @event as TestUpdateEventFoo;
                            newFooBarEvents.Add(new TestUpdateEventFooBar(fooBarId, theEvent.UpdatedFieldValue));
                        }
                    }

                    HandleMaxRevision(fooBarId);
                    var aggregateCommitFooBar = new AggregateCommit(fooBarId.RawId, current.BoundedContext, aggregateMaxRevision[fooBarId], newFooBarEvents);
                    yield return(aggregateCommitFooBar);
                }
                else
                {
                    var fooBarId        = new FooBarId("1234", "elders");
                    var newFooBarEvents = new List <IEvent>();
                    foreach (IEvent @event in current.Events)
                    {
                        if (@event.GetType() == typeof(TestCreateEventBar))
                        {
                            newFooBarEvents.Add(new TestCreateEventFooBar(fooBarId));
                        }
                        else if (@event.GetType() == typeof(TestUpdateEventBar))
                        {
                            var theEvent = @event as TestUpdateEventBar;
                            newFooBarEvents.Add(new TestUpdateEventFooBar(fooBarId, theEvent.UpdatedFieldValue));
                        }
                    }
                    HandleMaxRevision(fooBarId);
                    var aggregateCommitFooBar = new AggregateCommit(fooBarId.RawId, current.BoundedContext, aggregateMaxRevision[fooBarId], newFooBarEvents);
                    yield return(aggregateCommitFooBar);
                }
            }
            else
            {
                yield return(current);
            }
        }
Beispiel #3
0
        public bool ShouldApply(AggregateCommit current)
        {
            var    tenantUrn            = new TenantUrn(Encoding.UTF8.GetString(current.AggregateRootId).ToLowerInvariant());
            string currentAggregateName = tenantUrn.Parts[2];

            if (currentAggregateName == targetAggregateName)
            {
                return(true);
            }

            return(false);
        }