Exemplo n.º 1
0
        /// <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;
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 /// <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)
 {
 }