public IEnumerable <AggregateCommit> Apply(AggregateCommit current) { if (ShouldApply(current)) { var urnRaw = Urn.Parse(Encoding.UTF8.GetString(current.AggregateRootId)); var urn = StringTenantUrn.Parse(urnRaw.Value); var fooId = new FooId(urn.Id, urn.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, aggregateMaxRevision[fooId], newFooEvents); yield return(aggregateCommitFooBar); } else { yield return(current); } }
public IEnumerable <AggregateCommit> Apply(AggregateCommit current) { if (ShouldApply(current)) { var urnRaw = Urn.Parse(Encoding.UTF8.GetString(current.AggregateRootId)); var urn = StringTenantUrn.Parse(urnRaw.Value); string currentAggregateName = urn.ArName; 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, 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, aggregateMaxRevision[fooBarId], newFooBarEvents); yield return(aggregateCommitFooBar); } } else { yield return(current); } }
public bool ShouldApply(AggregateCommit current) { var urnRaw = Urn.Parse(Encoding.UTF8.GetString(current.AggregateRootId)); var urn = StringTenantUrn.Parse(urnRaw.Value); string currentAggregateName = urn.ArName; if (currentAggregateName == targetAggregateName) { return(true); } return(false); }
bool TryResolve(byte[] id, out string tenant) { tenant = string.Empty; var urn = System.Text.Encoding.UTF8.GetString(id); StringTenantUrn stringTenantUrn; if (StringTenantUrn.TryParse(urn, out stringTenantUrn)) { tenant = stringTenantUrn.Tenant; return(true); } return(false); }
IAggregateRootId GetAggregateRootId(string mess) { var parts = mess.Split(new[] { "||" }, StringSplitOptions.RemoveEmptyEntries); foreach (var part in parts) { StringTenantUrn urn; if (StringTenantUrn.TryParse(part, out urn)) { return(new StringTenantId(urn, urn.ArName)); } else { byte[] raw = Convert.FromBase64String(part); string urnString = Encoding.UTF8.GetString(raw); if (StringTenantUrn.TryParse(urnString, out urn)) { return(new StringTenantId(urn, urn.ArName)); } } } throw new ArgumentException($"Invalid aggregate root id: {mess}", nameof(mess)); }
public ProjectionVersionManagerId(StringTenantUrn urn) : base(urn, "projectionmanager") { }