/// <summary> /// Initializes a new instance of the <see cref="DocumentDbDomainEvent" /> class. /// </summary> /// <param name="eventWrapper">The domain eventWrapper.</param> protected DocumentDbDomainEvent(DomainEventWrapper eventWrapper) { Check.NotNull(eventWrapper, nameof(eventWrapper)); var jsonObjectSerializer = new JsonObjectSerializer(); EventId = eventWrapper.EventId; Name = eventWrapper.EventName; AggregateId = eventWrapper.AggregateId; Sequence = eventWrapper.Sequence; CreatedOnUtc = eventWrapper.CreatedOnUtc; CreatedBy = eventWrapper.CreatedBy; Payload = jsonObjectSerializer.Serialize(eventWrapper.Event); AggregateVersion = eventWrapper.AggregateVersion; }
private Result Append(IEnumerable <IDomainEvent> domainEvents, long currentEntityVersion) { var eventsToAdd = domainEvents.ToList(); if (!eventsToAdd.Any()) { return(Result.Ok()); } var entityId = eventsToAdd.First().EntityId; if (!_domainEvents.ContainsKey(entityId)) { _domainEvents[entityId] = new List <DomainEventWrapper>(); } var eventWrappers = _domainEvents[entityId].ToList(); var maxVersion = eventWrappers.OrderBy(e => e.OverallVersion) .LastOrDefault()? .EntityStreamVersion ?? 0; if (maxVersion != currentEntityVersion) { return(Result.ConcurrencyResult(currentEntityVersion, maxVersion)); } var newVersion = currentEntityVersion; var domainEventWrappers = new List <DomainEventWrapper>(); domainEventWrappers.AddRange(eventWrappers); foreach (var domainEvent in eventsToAdd) { _currentCache++; var domainEventWrapper = new DomainEventWrapper { OverallVersion = _currentCache, DomainEvent = domainEvent, EntityStreamVersion = ++newVersion }; domainEventWrappers.Add(domainEventWrapper); } _domainEvents[entityId] = domainEventWrappers; return(Result.Ok()); }
public async Task ApplyMethod_WrongIfDeclared() { var entityStremRepo = new Mock <IEventRepository>(); var snapShotRepo = new Mock <ISnapShotRepository>(); snapShotRepo.Setup(re => re.LoadSnapShot <TestEntity_NoIApply>(It.IsAny <string>())) .ReturnsAsync(SnapShotResult <TestEntity_NoIApply> .Default()); var entityId = Guid.NewGuid(); var testEventEventStore = new TestEventEventStore(entityId); var domainEventWrapper = new DomainEventWrapper { DomainEvent = testEventEventStore }; entityStremRepo.Setup(ev => ev.LoadEventsByEntity(It.IsAny <string>(), It.IsAny <long>())) .ReturnsAsync(Result <IEnumerable <DomainEventWrapper> > .Ok(new[] { domainEventWrapper })); var eventStore = new EventStore(entityStremRepo.Object, snapShotRepo.Object, new SnapShotConfig()); var loadAsync = await eventStore.LoadAsync <TestEntity_NoIApply>(entityId.ToString()); Assert.AreEqual(Guid.Empty, loadAsync.Value.Id); }
/// <summary> /// Initializes a new instance of the <see cref="DocumentDbDomainEvent"/> class. /// </summary> /// <param name="eventWrapper">The domain eventWrapper.</param> public TestEvent(DomainEventWrapper eventWrapper) : base(eventWrapper) { }