Пример #1
0
 protected void apply(VersionedEvent e)
 {
     e.Version = version + 1;
     handlers[e.GetType()].Invoke(e);
     version = e.Version;
     pendingEvents.Add(e);
 }
Пример #2
0
        public void Patron_Can_Be_Hydrated_From_Patron_Created_And_Empty_Updated()
        {
            var patronId = Guid.NewGuid();
            var evnts    = new VersionedEvent[] {
                new PatronCreated("Create User", TestHelper.Now, Guid.NewGuid())
                {
                    DisplayName = "Test Creation",
                    IsAnonymous = false,
                    PatronType  = "Test Account",
                    PatronId    = patronId,
                    Version     = 0
                },
                new PatronHeaderChanged("Change User", TestHelper.Later, Guid.NewGuid())
                {
                    PatronId = patronId,
                    Version  = 1
                }
            };
            Patron result = new Patron(patronId, evnts);

            Assert.Equal("Test Creation", result.DisplayName);
            Assert.False(result.IsAnonymous);
            Assert.Equal("Test Account", result.PatronType);
            Assert.Equal(patronId, result.Id);
            Assert.Equal(1, result.Version);
            Assert.Equal("Create User", result.CreatedBy);
            Assert.Equal(TestHelper.Now, result.CreatedOn);
            Assert.Equal("Change User", result.ModifiedBy);
            Assert.Equal(TestHelper.Later, result.ModifiedOn);
            Assert.Null(result.DeletedBy);
            Assert.Null(result.DeletedOn);
        }
Пример #3
0
 protected void Update(VersionedEvent e)
 {
     e.SourceId = Id;
     e.Version  = version + 1;
     handlers[e.GetType()].Invoke(e);
     version = e.Version;
     pendingEvents.OnNext(e);
 }
Пример #4
0
        protected void RecoverEvent(VersionedEvent @event)
        {
            State.ApplyEvent(@event);

            if (!BecomeStatus(@event))
            {
                throw new AggregateRecoveryException(@event);
            }
        }
Пример #5
0
 protected override bool BecomeStatus(VersionedEvent @event)
 {
     return(@event.Match()
            .With <PapierSettingPersoonGeregistreerd>(() => Become(Geregistreerd, nameof(Geregistreerd)))
            .With <PapierSettingPersoonPapierAangezet>(() => Become(PapierAan, nameof(PapierAan)))
            .With <PapierSettingPersoonPapierUitgezet>(() => Become(PapierUit, nameof(PapierUit)))
            .With <PapierSettingPersoonUitgeschreven>(() => Become(Uitgeschreven, nameof(Uitgeschreven)))
            .WasHandled);
 }
 private void CheckVersionProjectAndUpdate(RM.PapierSettingPersoon rm, VersionedEvent @event, QueryContext db)
 {
     if (CheckEventVersion(rm.Version, @event.Version))
     {
         _projections.Project(ref rm, @event);
         db.SaveChanges();
     }
     else
     {
         throw new Exception(string.Format("Kan PapierSettingPersoon '{0}', versie {1} niet updaten. Versie van het '{2}' applicatie event is {3}.",
                                           rm.PapierSettingPersoonId, rm.Version, @event.GetType().ToString(), @event.Version));
     }
 }
Пример #7
0
        public async Task Should_Throw_If_Version_Is_The_Same()
        {
            /* Setup */
            var repo           = new MongoDbEventStreamRepository(new MongoClient());
            var versionedEvent = new VersionedEvent(1, new TestEvent());
            var streamName     = Guid.NewGuid().ToString();

            /* Test */
            await repo.AppendEventsAsync(streamName, new[] { versionedEvent });

            var evs = await repo.GetStreamEventsAsync(streamName);

            /* Assert */
        }
        private void UpdatePapierSettingPersoon(VersionedEvent @event, Expression <Func <RM.PapierSettingPersoon, bool> > rmRecordSelection)
        {
            using (var db = _queryContextFactory())
            {
                var PapierSettingPersoon = db.PapierSettingsPersoon.FirstOrDefault(rmRecordSelection);

                if (PapierSettingPersoon == null)
                {
                    throw new Exception(string.Format("Geen PapierSettingPersoon gevonden met AR Id '{0}' bij het projecteren van een '{1}' applicatie event.",
                                                      @event.AggregateId, @event.GetType().ToString()));
                }

                CheckVersionProjectAndUpdate(PapierSettingPersoon, @event, db);
            }
        }
Пример #9
0
        protected void RaiseEvent(VersionedEvent @event, Action <VersionedEvent> onAfterPersistPublish = null)
        {
            @event.AggregateId = State.Id;
            @event.Version     = State.Version + 1;

            Persist(@event, e =>
            {
                State.ApplyEvent(@event);
                BecomeStatus(@event);

                _applicationEventPublisher.Tell(@event);

                if (onAfterPersistPublish != null)
                {
                    onAfterPersistPublish(@event);
                }
            });
        }
        private void UpsertPapierSettingPersoon(VersionedEvent @event, Expression <Func <RM.PapierSettingPersoon, bool> > rmRecordSelection)
        {
            using (var db = _queryContextFactory())
            {
                var PapierSettingPersoon = db.PapierSettingsPersoon.FirstOrDefault(rmRecordSelection);

                if (PapierSettingPersoon == null)
                {
                    PapierSettingPersoon = new Query.PapierSettingPersoon.PapierSettingPersoon();
                    _projections.Project(ref PapierSettingPersoon, @event);

                    db.PapierSettingsPersoon.Add(PapierSettingPersoon);
                    db.SaveChanges();
                }
                else
                {
                    CheckVersionProjectAndUpdate(PapierSettingPersoon, @event, db);
                }
            }
        }
Пример #11
0
 public void ApplyEvent(VersionedEvent @event)
 {
     Version = @event.Version;
     _applyMethods[@event.GetType()](@event);
 }
Пример #12
0
 protected virtual bool BecomeStatus(VersionedEvent @event)
 {
     return(true);
 }
Пример #13
0
 public AggregateRecoveryException(VersionedEvent @event)
     : base(string.Format("Could not recover from event type '{0}'", @event.GetType().FullName))
 {
 }
 VersionedEventSource ToVersionedEventSource(VersionedEvent versionedEvent, EventSourceId eventSourceId, ArtifactId artifact)
 {
     return(new VersionedEventSource(new EventSourceVersion(versionedEvent.Version.Commit, versionedEvent.Version.Sequence), new EventSourceKey(eventSourceId, artifact)));
 }