protected void apply(VersionedEvent e) { e.Version = version + 1; handlers[e.GetType()].Invoke(e); version = e.Version; pendingEvents.Add(e); }
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); }
protected void Update(VersionedEvent e) { e.SourceId = Id; e.Version = version + 1; handlers[e.GetType()].Invoke(e); version = e.Version; pendingEvents.OnNext(e); }
protected void RecoverEvent(VersionedEvent @event) { State.ApplyEvent(@event); if (!BecomeStatus(@event)) { throw new AggregateRecoveryException(@event); } }
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)); } }
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); } }
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); } } }
public void ApplyEvent(VersionedEvent @event) { Version = @event.Version; _applyMethods[@event.GetType()](@event); }
protected virtual bool BecomeStatus(VersionedEvent @event) { return(true); }
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))); }