コード例 #1
0
        public void Event_saving_smoke_test()
        {
            var targetStore = new RavenDBEventStore(_documentStore);
            var id = Guid.NewGuid();

            int sequenceCounter = 0;

            var events = new UncommittedEventStream(Guid.NewGuid());

            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo",
                                                                                                                                   35),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                                                                              "Name" + sequenceCounter),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                                                                              "Name" + sequenceCounter),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                                                                              "Name" + sequenceCounter),
                                               new Version(1, 0)));
                             

            targetStore.Store(events);
        }
コード例 #2
0
        public void Event_saving_smoke_test()
        {
            var targetStore = new RavenDBEventStore(_documentStore);
            var id          = Guid.NewGuid();

            int sequenceCounter = 0;

            var events = new UncommittedEventStream(Guid.NewGuid());

            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo",
                                                                                                                                   35),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                   "Name" + sequenceCounter),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                   "Name" + sequenceCounter),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                   "Name" + sequenceCounter),
                                               new Version(1, 0)));


            targetStore.Store(events);
        }
コード例 #3
0
        public void Retrieving_all_events_should_return_the_same_as_added() {
            var id=Guid.NewGuid();
            var sequenceCounter=0;

            var stream = new UncommittedEventStream(Guid.NewGuid());
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo", 35),
                                     new Version(1, 0)));
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                                     new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                                     new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
            
            _store.Store(stream);

            var result=_store.ReadFrom(id, long.MinValue, long.MaxValue);
            result.Count().Should().Be(stream.Count());
            result.First().EventIdentifier.Should().Be(stream.First().EventIdentifier);
            //TODO:

            var streamList = stream.ToList();
            var resultList = result.ToList();

            for (int i = 0; i < resultList.Count; i++)
            {
                Assert.IsTrue(AreEqual(streamList[i], resultList[i]));
            }
        }
コード例 #4
0
 public void When_contains_multpile_events_from_different_sources_should_indicate_non_single_source()
 {
     var sut = new UncommittedEventStream(Guid.NewGuid());
     sut.Append(CreateEvent(Guid.NewGuid()));
     sut.Append(CreateEvent(Guid.NewGuid()));
     Assert.IsFalse(sut.HasSingleSource);
 }
コード例 #5
0
ファイル: SQLiteEventStoreTests.cs プロジェクト: zonaid/ncqrs
        public void Retrieving_all_events_should_return_the_same_as_added()
        {
            var id = Guid.NewGuid();
            var sequenceCounter = 0;

            var stream = new UncommittedEventStream(Guid.NewGuid());

            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo", 35),
                                     new Version(1, 0)));
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                                     new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                                     new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));

            _store.Store(stream);

            var result = _store.ReadFrom(id, long.MinValue, long.MaxValue);

            result.Count().Should().Be(stream.Count());
            result.First().EventIdentifier.Should().Be(stream.First().EventIdentifier);
            //TODO:

            var streamList = stream.ToList();
            var resultList = result.ToList();

            for (int i = 0; i < resultList.Count; i++)
            {
                Assert.IsTrue(AreEqual(streamList[i], resultList[i]));
            }
        }
コード例 #6
0
        public void When_contains_multpile_events_from_different_sources_should_indicate_non_single_source()
        {
            var sut = new UncommittedEventStream(Guid.NewGuid());

            sut.Append(CreateEvent(Guid.NewGuid()));
            sut.Append(CreateEvent(Guid.NewGuid()));
            Assert.IsFalse(sut.HasSingleSource);
        }
コード例 #7
0
 public void When_contains_multpile_events_from_same_source_should_indicate_a_single_source()
 {
     var sut = new UncommittedEventStream(Guid.NewGuid());
     var eventSourceId = Guid.NewGuid();
     sut.Append(CreateEvent(eventSourceId));
     sut.Append(CreateEvent(eventSourceId));
     Assert.IsTrue(sut.HasSingleSource);
 }
コード例 #8
0
        public void When_contains_multpile_events_from_same_source_should_indicate_a_single_source()
        {
            var sut           = new UncommittedEventStream(Guid.NewGuid());
            var eventSourceId = Guid.NewGuid();

            sut.Append(CreateEvent(eventSourceId));
            sut.Append(CreateEvent(eventSourceId));
            Assert.IsTrue(sut.HasSingleSource);
        }
コード例 #9
0
        public void Retrieved_event_should_having_identical_timestamp_as_persisted()
        {
            var id = Guid.NewGuid();
            var utcNow = DateTime.UtcNow.Date.AddHours(9).AddTicks(-1);

            var stream = new UncommittedEventStream(Guid.NewGuid());
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, typeof(object), 1, 0, utcNow, new CustomerCreatedEvent("Foo", 35),
                                     new Version(1, 0)));

            _store.Store(stream);

            using (var conn = new SQLiteConnection(_connString))
            {
                conn.Open();

                using (var cmd = new SQLiteCommand("SELECT [TimeStamp] FROM [Events]", conn))
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        var timestamp = (long)reader["Timestamp"];
                        timestamp.Should().Be(utcNow.Ticks);
                    }
                }
            }
        }
コード例 #10
0
        public void Rolling_back_transaction_should_remove_inserted_rows()
        {
            var id = Guid.NewGuid();
            var utcNow = DateTime.UtcNow.Date.AddHours(9).AddTicks(-1);

            var stream = new UncommittedEventStream(Guid.NewGuid());
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, 1, 0, utcNow, new CustomerCreatedEvent("Foo", 35),
                                     new Version(1, 0)));

            _store.Store(stream);
            _transaction.Rollback();

            using (var conn = new SQLiteConnection(_connString))
            {
                conn.Open();

                using (var cmd = new SQLiteCommand("SELECT [TimeStamp] FROM [Events]", conn))
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Assert.Fail("No rows should exist");
                    }
                }
            }
        }
コード例 #11
0
ファイル: SQLiteEventStoreTests.cs プロジェクト: zonaid/ncqrs
        public void Retrieved_event_should_having_identical_timestamp_as_persisted()
        {
            var id     = Guid.NewGuid();
            var utcNow = DateTime.UtcNow.Date.AddHours(9).AddTicks(-1);

            var stream = new UncommittedEventStream(Guid.NewGuid());

            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, 1, 0, utcNow, new CustomerCreatedEvent("Foo", 35),
                                     new Version(1, 0)));

            _store.Store(stream);

            using (var conn = new SQLiteConnection(_connString))
            {
                conn.Open();

                using (var cmd = new SQLiteCommand("SELECT [TimeStamp] FROM [Events]", conn))
                    using (var reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var timestamp = (long)reader["Timestamp"];
                            timestamp.Should().Be(utcNow.Ticks);
                        }
                    }
            }
        }
コード例 #12
0
ファイル: JoesUnitOfWork.cs プロジェクト: zonaid/ncqrs
        protected override void AggregateRootEventAppliedHandler(AggregateRoot aggregateRoot, UncommittedEvent evnt)
        {
            var message = new EventMessage
            {
                Body = new StoredEvent
                {
                    Body         = evnt.Payload,
                    CommitId     = _commitId,
                    EventId      = evnt.EventIdentifier,
                    MajorVersion = evnt.EventVersion.Major,
                    MinorVersion = evnt.EventVersion.Minor,
                    Sequence     = evnt.EventSequence,
                    TimeStamp    = evnt.EventTimeStamp
                }
            };
            IEventStream stream;
            var          id = aggregateRoot.EventSourceId;

            if (!_trackedStreams.TryGetValue(id, out stream))
            {
                stream = _eventStore.CreateStream(id);
                _trackedStreams[id] = stream;
            }
            stream.Add(message);
            _eventStream.Append(evnt);
            _dirtyInstances.Add(aggregateRoot);
        }
コード例 #13
0
        public void Rolling_back_transaction_should_remove_inserted_rows()
        {
            var id     = Guid.NewGuid();
            var utcNow = DateTime.UtcNow.Date.AddHours(9).AddTicks(-1);

            var stream = new UncommittedEventStream(Guid.NewGuid());

            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, 1, 0, utcNow, new CustomerCreatedEvent("Foo", 35),
                                     new Version(1, 0)));

            _store.Store(stream);
            _transaction.Rollback();

            using (var conn = new SQLiteConnection(_connString))
            {
                conn.Open();

                using (var cmd = new SQLiteCommand("SELECT [TimeStamp] FROM [Events]", conn))
                    using (var reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Assert.Fail("No rows should exist");
                        }
                    }
            }
        }
コード例 #14
0
ファイル: EventStoreWrapper.cs プロジェクト: aph5/FastAgile
 private UncommittedEventStream BuildStream(Guid commitId, IEnumerable<UncommittedEvent> events)
 {
     var stream = new UncommittedEventStream(commitId);
     foreach (var evnt in events)
         stream.Append(evnt);
     return stream;
 }
コード例 #15
0
        public void When_contains_single_event_should_indicate_a_single_source()
        {
            var sut = new UncommittedEventStream(Guid.NewGuid());

            sut.Append(new UncommittedEvent(Guid.NewGuid(), Guid.NewGuid(), 0, 0, DateTime.UtcNow, new object(), new Version(1, 0)));
            Assert.IsTrue(sut.HasSingleSource);
        }
コード例 #16
0
        public void Process(CaseReported @event)
        {
            var caseReport = _caseReports.GetById(@event.Id);

            if (caseReport == null)
            {
                caseReport = new CaseReport
                {
                    Id = @event.Id,
                    DataCollectorId     = @event.DataCollectorId,
                    HealthRiskId        = @event.HealthRiskId,
                    Location            = @event.Location,
                    SubmissionTimestamp = @event.CaseOccured
                };
            }
            else
            {
                caseReport.Id = @event.Id;
                caseReport.DataCollectorId     = @event.DataCollectorId;
                caseReport.HealthRiskId        = @event.HealthRiskId;
                caseReport.Location            = @event.Location;
                caseReport.SubmissionTimestamp = @event.CaseOccured;
            }
            _caseReports.Save(caseReport);

            var disease = _healthRisks.GetById(caseReport.HealthRiskId) ?? new HealthRisk
            {
                Id = @event.HealthRiskId,
                ThresholdTimePeriodInDays = 7,
                ThresholdNumberOfCases    = 3
            };

            var latestReports = _caseReports.GetCaseReportsAfterDate(
                DateTime.UtcNow.Subtract(TimeSpan.FromDays(disease.ThresholdTimePeriodInDays)), caseReport.HealthRiskId);

            if (latestReports.Count > disease.ThresholdNumberOfCases)
            {
                var alert = _alerts.Get(caseReport.HealthRiskId, caseReport.Location);
                if (alert == null)
                {
                    alert = new Alert
                    {
                        Id           = Guid.NewGuid(),
                        HealthRiskId = caseReport.HealthRiskId,
                        Location     = caseReport.Location,
                    };
                }
                alert.CaseReports.Add(caseReport);
                _alerts.Save(alert);


                // Todo: Temporary fix - we're not supposed to do this, awaiting the new Policy building block in doLittle to be ready
                var stream = new UncommittedEventStream(null);
                stream.Append(new AlertRaised(), EventSourceVersion.Zero.NextCommit());
                _uncommittedEventStreamCoordinator.Commit(TransactionCorrelationId.New(), stream);

                _feedbackService.SendFeedbackToDataCollecorsAndVerifiers(latestReports);
            }
        }
コード例 #17
0
ファイル: AlertFeedbackService.cs プロジェクト: wegiangb/cbs
        void ApplyEvent(IEvent @event)
        {
            // Todo: Temporary fix - we're not supposed to do this, awaiting the new Policy building block in doLittle to be ready
            var stream = new UncommittedEventStream(null);

            stream.Append(@event, EventSourceVersion.Zero.NextCommit());
            _uncommittedEventStreamCoordinator.Commit(TransactionCorrelationId.New(), stream);
        }
コード例 #18
0
 public void Save_SmokeTest()
 {
     var sequenceCounter = 0;
     var id=Guid.NewGuid();
     var stream = new UncommittedEventStream(Guid.NewGuid());
     stream.Append(
         new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo", 35),
                              new Version(1, 0)));
     stream.Append(
         new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                              new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
     stream.Append(
         new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                              new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
                 
     _store.Store(stream);
 }
コード例 #19
0
        public void Save_SmokeTest()
        {
            var sequenceCounter = 0;
            var id     = Guid.NewGuid();
            var stream = new UncommittedEventStream(Guid.NewGuid());

            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo", 35),
                                     new Version(1, 0)));
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                                     new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
            stream.Append(
                new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow,
                                     new CustomerNameChanged("Name" + sequenceCounter), new Version(1, 0)));
            _store.Store(stream);
            _transaction.Commit();
        }
コード例 #20
0
        private UncommittedEventStream BuildStream(Guid commitId, IEnumerable <UncommittedEvent> events)
        {
            var stream = new UncommittedEventStream(commitId);

            foreach (var evnt in events)
            {
                stream.Append(evnt);
            }
            return(stream);
        }
コード例 #21
0
ファイル: Program.cs プロジェクト: VincentSchippefilt/ncqrs
 private static void GenerateEvents()
 {
     var eventStore = new MsSqlServerEventStore(ConfigurationManager.ConnectionStrings["Main"].ConnectionString);
     for (int i = 0; i < 1000; i++)
     {
         var uncommittedEventStream = new UncommittedEventStream(Guid.NewGuid());
         uncommittedEventStream.Append(new UncommittedEvent(Guid.NewGuid(), Guid.NewGuid(), i, i, DateTime.Now, new object(), new Version(1, 0)));                
         eventStore.Store(uncommittedEventStream);
     }
 }
コード例 #22
0
ファイル: Program.cs プロジェクト: zonaid/ncqrs
        private static void GenerateEvents()
        {
            var eventStore = new MsSqlServerEventStore(ConfigurationManager.ConnectionStrings["Main"].ConnectionString);

            for (int i = 0; i < 1000; i++)
            {
                var uncommittedEventStream = new UncommittedEventStream(Guid.NewGuid());
                uncommittedEventStream.Append(new UncommittedEvent(Guid.NewGuid(), Guid.NewGuid(), i, i, DateTime.Now, new object(), new Version(1, 0)));
                eventStore.Store(uncommittedEventStream);
            }
        }
コード例 #23
0
        public void When_getting_all_event_from_an_existing_event_source_the_result_should_be_all_events_stored_for_that_event_source()
        {
            var eventSourceId = Guid.NewGuid();

            var stream1 = new UncommittedEventStream(Guid.NewGuid());
            stream1.Append(new UncommittedEvent(Guid.NewGuid(), eventSourceId, typeof(object), 1, 0, DateTime.UtcNow, new object(), new Version(1, 0)));
            stream1.Append(new UncommittedEvent(Guid.NewGuid(), eventSourceId, typeof(object), 2, 0, DateTime.UtcNow, new object(), new Version(1, 0)));

            var stream2 = new UncommittedEventStream(Guid.NewGuid());
            stream2.Append(new UncommittedEvent(Guid.NewGuid(), eventSourceId, typeof(object), 3, 1, DateTime.UtcNow, new object(), new Version(1, 0)));
            stream2.Append(new UncommittedEvent(Guid.NewGuid(), eventSourceId, typeof(object), 4, 1, DateTime.UtcNow, new object(), new Version(1, 0)));
            stream2.Append(new UncommittedEvent(Guid.NewGuid(), eventSourceId, typeof(object), 5, 1, DateTime.UtcNow, new object(), new Version(1, 0)));

            var store = new InMemoryEventStore();

            store.Store(stream1);
            store.Store(stream2);

            var events = store.ReadFrom(eventSourceId, typeof(object), long.MinValue, long.MaxValue);

            events.Count().Should().Be(5);
        }
コード例 #24
0
        public void Saving_event_source_while_there_is_a_newer_event_source_should_throw_concurency_exception()
        {
            var targetStore = new RavenDBEventStore(_documentStore);
            var id          = Guid.NewGuid();

            int sequenceCounter = 0;

            var events = new UncommittedEventStream(Guid.NewGuid());

            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo",
                                                                                                                                   35),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                   "Name" + sequenceCounter),
                                               new Version(1, 0)));

            targetStore.Store(events);

            Action act = () => targetStore.Store(events);

            act.ShouldThrow <ConcurrencyException>();
        }
コード例 #25
0
        public void When_getting_all_event_from_an_existing_event_source_the_result_should_be_all_events_stored_for_that_event_source()
        {
            var eventSourceId = Guid.NewGuid();

            var stream1 = new UncommittedEventStream(Guid.NewGuid());

            stream1.Append(new UncommittedEvent(Guid.NewGuid(), eventSourceId, 1, 0, DateTime.UtcNow, new object(), new Version(1, 0)));
            stream1.Append(new UncommittedEvent(Guid.NewGuid(), eventSourceId, 2, 0, DateTime.UtcNow, new object(), new Version(1, 0)));

            var stream2 = new UncommittedEventStream(Guid.NewGuid());

            stream2.Append(new UncommittedEvent(Guid.NewGuid(), eventSourceId, 3, 1, DateTime.UtcNow, new object(), new Version(1, 0)));
            stream2.Append(new UncommittedEvent(Guid.NewGuid(), eventSourceId, 4, 1, DateTime.UtcNow, new object(), new Version(1, 0)));
            stream2.Append(new UncommittedEvent(Guid.NewGuid(), eventSourceId, 5, 1, DateTime.UtcNow, new object(), new Version(1, 0)));

            var store = new InMemoryEventStore();

            store.Store(stream1);
            store.Store(stream2);

            var events = store.ReadFrom(eventSourceId, long.MinValue, long.MaxValue);

            events.Count().Should().Be(5);
        }
コード例 #26
0
ファイル: Program.cs プロジェクト: VincentSchippefilt/ncqrs
        private static void GenerateEventsForAggregateRoots()
        {
            const int aggregateRootCount = 10;
            var aggregateRoots = Enumerable.Range(0, aggregateRootCount).Select(x => Guid.NewGuid()).ToList();
            var random = new Random();

            var eventStore = new MsSqlServerEventStore(ConfigurationManager.ConnectionStrings["Main"].ConnectionString);
            for (int i = 0; i < 1000; i++)
            {
                Guid rootId = aggregateRoots[random.Next(aggregateRootCount)];

                var uncommittedEventStream = new UncommittedEventStream(Guid.NewGuid());
                uncommittedEventStream.Append(new UncommittedEvent(Guid.NewGuid(), rootId, i, i, DateTime.Now, new object(), new Version(1, 0)));                
            }
        }
コード例 #27
0
        public void SaveUncommittedEventsToEventStore(IEventStore eventStore)
        {
            foreach (var aggregatedRootId in _aggregatedRootEvents.Keys)
            {
                var events = _aggregatedRootEvents[aggregatedRootId];

                var uncommittedEventStream = new UncommittedEventStream(aggregatedRootId);
                foreach (var @event in events)
                {
                    uncommittedEventStream.Append(@event);
                }

                eventStore.Commit(uncommittedEventStream);
            }
        }
コード例 #28
0
        public void Retrieving_all_events_should_return_the_same_as_added()
        {
            var targetStore = new RavenDBEventStore(_documentStore);
            var id = Guid.NewGuid();

            int sequenceCounter = 0;

            var events = new UncommittedEventStream(Guid.NewGuid());

            events.Append(new UncommittedEvent(Guid.NewGuid(), id, typeof(object), sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo",
                                                                                                                                         35),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, typeof(object), sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                                                                                    "Name" + sequenceCounter),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, typeof(object), sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                                                                                    "Name" + sequenceCounter),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, typeof(object), sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                                                                                    "Name" + sequenceCounter),
                                               new Version(1, 0)));

            targetStore.Store(events);

            var result = targetStore.ReadFrom(id, long.MinValue, long.MaxValue);
            result.Count().Should().Be(events.Count());
            result.First().EventIdentifier.Should().Be(events.First().EventIdentifier);

            var streamList = events.ToList();
            var resultList = result.ToList();

            for (int i = 0; i < resultList.Count; i++)
            {
                Assert.IsTrue(AreEqual(streamList[i], resultList[i]));
            }
        }
コード例 #29
0
ファイル: Prepare.cs プロジェクト: VincentSchippefilt/ncqrs
            public UncommittedEventStream ForSourceUncomitted(Guid id, Guid commitId, int sequenceOffset = 0)
            {                
                int initialVersion = sequenceOffset == 0 ? 1 : sequenceOffset;
                int sequence = initialVersion;

                var comittedEvents = new List<CommittedEvent>();
                var result = new UncommittedEventStream(commitId);
                foreach (var evnt in _events)
                {
                    var uncommittedEvent = new UncommittedEvent(Guid.NewGuid(), id, sequence, initialVersion, DateTime.UtcNow,
                                                            evnt, new Version(1, 0));
                    result.Append(uncommittedEvent);
                    sequence++;
                }
                return result;
            }
コード例 #30
0
ファイル: Program.cs プロジェクト: zonaid/ncqrs
        private static void GenerateEventsForAggregateRoots()
        {
            const int aggregateRootCount = 10;
            var       aggregateRoots     = Enumerable.Range(0, aggregateRootCount).Select(x => Guid.NewGuid()).ToList();
            var       random             = new Random();

            var eventStore = new MsSqlServerEventStore(ConfigurationManager.ConnectionStrings["Main"].ConnectionString);

            for (int i = 0; i < 1000; i++)
            {
                Guid rootId = aggregateRoots[random.Next(aggregateRootCount)];

                var uncommittedEventStream = new UncommittedEventStream(Guid.NewGuid());
                uncommittedEventStream.Append(new UncommittedEvent(Guid.NewGuid(), rootId, i, i, DateTime.Now, new object(), new Version(1, 0)));
            }
        }
コード例 #31
0
        public static UncommittedEventStream Create()
        {
            var theEventSourceId             = Guid.NewGuid();
            var theInitialEventSourceVersion = 0;
            var theCommitId = Guid.NewGuid();
            var theVersion  = new Version(1, 0);

            int sequenceCounter = 1;

            var events = new[]
            {
                new UncommittedEvent
                (
                    Guid.NewGuid(), theEventSourceId, sequenceCounter++, theInitialEventSourceVersion, DateTime.Now,
                    new CustomerCreatedEvent(Guid.NewGuid(), theEventSourceId, sequenceCounter, DateTime.UtcNow, "Foo", 35),
                    theVersion
                ),
                new UncommittedEvent
                (
                    Guid.NewGuid(), theEventSourceId, sequenceCounter++, theInitialEventSourceVersion, DateTime.Now,
                    new CustomerNameChanged(Guid.NewGuid(), theEventSourceId, sequenceCounter, DateTime.UtcNow, "Name" + sequenceCounter),
                    theVersion
                ),
                new UncommittedEvent
                (
                    Guid.NewGuid(), theEventSourceId, sequenceCounter++, theInitialEventSourceVersion, DateTime.Now,
                    new CustomerNameChanged(Guid.NewGuid(), theEventSourceId, sequenceCounter, DateTime.UtcNow, "Name" + sequenceCounter),
                    theVersion
                ),
                new UncommittedEvent
                (
                    Guid.NewGuid(), theEventSourceId, sequenceCounter++, theInitialEventSourceVersion, DateTime.Now,
                    new CustomerNameChanged(Guid.NewGuid(), theEventSourceId, sequenceCounter, DateTime.UtcNow, "Name" + sequenceCounter),
                    theVersion
                ),
            };

            var eventStream = new UncommittedEventStream(theCommitId);

            foreach (var e in events)
            {
                eventStream.Append(e);
            }

            return(eventStream);
        }
コード例 #32
0
            public UncommittedEventStream ForSourceUncomitted(Guid id, Guid commitId, int sequenceOffset = 0)
            {
                int sequence       = sequenceOffset + 1;
                int initialVersion = sequenceOffset == 0 ? 1 : sequenceOffset;

                var comittedEvents = new List <CommittedEvent>();
                var result         = new UncommittedEventStream(commitId);

                foreach (var evnt in _events)
                {
                    var uncommittedEvent = new UncommittedEvent(Guid.NewGuid(), id, sequence, initialVersion, DateTime.UtcNow,
                                                                evnt, new Version(1, 0));
                    result.Append(uncommittedEvent);
                    sequence++;
                }
                return(result);
            }
コード例 #33
0
ファイル: FakeEventStream.cs プロジェクト: otemnov/ncqrs
        public static UncommittedEventStream Create()
        {
            var theEventSourceId = Guid.NewGuid();
            var theInitialEventSourceVersion = 0;
            var theCommitId = Guid.NewGuid();
            var theVersion = new Version(1, 0);

            int sequenceCounter = 1;

            var events = new[]
            {
                new UncommittedEvent
                (
                    Guid.NewGuid(), theEventSourceId, typeof(object), sequenceCounter++, theInitialEventSourceVersion, DateTime.Now,
                    new CustomerCreatedEvent(Guid.NewGuid(), theEventSourceId, sequenceCounter, DateTime.UtcNow, "Foo",35),
                    theVersion
                ),
                new UncommittedEvent
                (
                    Guid.NewGuid(), theEventSourceId, typeof(object), sequenceCounter++, theInitialEventSourceVersion, DateTime.Now,
                    new CustomerNameChanged(Guid.NewGuid(), theEventSourceId, sequenceCounter, DateTime.UtcNow, "Name"+sequenceCounter),
                    theVersion
                ),
                new UncommittedEvent
                (
                    Guid.NewGuid(), theEventSourceId, typeof(object), sequenceCounter++, theInitialEventSourceVersion, DateTime.Now,
                    new CustomerNameChanged(Guid.NewGuid(), theEventSourceId, sequenceCounter, DateTime.UtcNow, "Name"+sequenceCounter),
                    theVersion
                ),
                new UncommittedEvent
                (
                    Guid.NewGuid(), theEventSourceId, typeof(object), sequenceCounter++, theInitialEventSourceVersion, DateTime.Now,
                    new CustomerNameChanged(Guid.NewGuid(), theEventSourceId, sequenceCounter, DateTime.UtcNow, "Name"+sequenceCounter),
                    theVersion
                ),
            };

            var eventStream = new UncommittedEventStream(theCommitId);
            foreach (var e in events) eventStream.Append(e);

            return eventStream;
        }
コード例 #34
0
 protected override void AggregateRootEventAppliedHandler(AggregateRoot aggregateRoot, UncommittedEvent evnt)
 {
     RegisterDirtyInstance(aggregateRoot);
     _eventStream.Append(evnt);
 }
コード例 #35
0
        public void Saving_event_source_while_there_is_a_newer_event_source_should_throw_concurency_exception()
        {
            var targetStore = new RavenDBEventStore(_documentStore);
            var id = Guid.NewGuid();

            int sequenceCounter = 0;

            var events = new UncommittedEventStream(Guid.NewGuid());

            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerCreatedEvent("Foo",
                                                                                                                                   35),
                                               new Version(1, 0)));
            events.Append(new UncommittedEvent(Guid.NewGuid(), id, sequenceCounter++, 0, DateTime.UtcNow, new CustomerNameChanged(
                                                                                                              "Name" + sequenceCounter),
                                               new Version(1, 0)));
            
            targetStore.Store(events);

            Action act = () => targetStore.Store(events);
            act.ShouldThrow<ConcurrencyException>();
        }
コード例 #36
0
 public void When_contains_single_event_should_indicate_a_single_source()
 {
     var sut = new UncommittedEventStream(Guid.NewGuid());
     sut.Append(new UncommittedEvent(Guid.NewGuid(), Guid.NewGuid(), typeof(object), 0, 0, DateTime.UtcNow, new object(), new Version(1, 0)));
     Assert.IsTrue(sut.HasSingleSource);
 }
コード例 #37
0
        public BoundedContextListener(
            KafkaConnectionString connectionString,
            ListenerConfiguration configuration,
            IEventConverter eventConverter,
            IUncommittedEventStreamCoordinator uncommittedEventStreamCoordinator,
            ISerializer serializer,
            ILogger logger,
            IApplicationResourceIdentifierConverter applicationResourceIdentifierConverter,
            IImplementationsOf <IEvent> eventTypes,
            IEventStore eventStore,
            IEventEnvelopes eventEnvelopes,
            IEventSequenceNumbers eventSequenceNumbers,
            IEventSourceVersions eventSourceVersions,
            ICommittedEventStreamBridge committedEventStreamBridge)
        {
            _serializer     = serializer;
            _eventConverter = eventConverter;
            _uncommittedEventStreamCoordinator = uncommittedEventStreamCoordinator;
            _logger = logger;
            _applicationResourceIdentifierConverter = applicationResourceIdentifierConverter;
            _eventTypes                 = eventTypes;
            _eventSequenceNumbers       = eventSequenceNumbers;
            _eventStore                 = eventStore;
            _eventEnvelopes             = eventEnvelopes;
            _eventSourceVersions        = eventSourceVersions;
            _committedEventStreamBridge = committedEventStreamBridge;



            logger.Information($"Listening on topic '{configuration.Topic}' from '{connectionString}'");

            var config = new Dictionary <string, object>
            {
                { "bootstrap.servers", connectionString },
                { "group.id", "simple-consumer" },
                { "enable.auto.commit", true },
                { "auto.commit.interval.ms", 1000 },
                {
                    "default.topic.config",
                    new Dictionary <string, object>()
                    {
                        { "auto.offset.reset", "smallest" }
                    }
                }
            };

            _consumer = new Consumer <Ignore, string>(config, null, new StringDeserializer(Encoding.UTF8));
            _consumer.Assign(new [] { new TopicPartition(configuration.Topic, 0) });
            _consumer.OnMessage += (_, msg) =>
            {
                try
                {
                    logger.Trace($"Message received '{msg.Value}'");
                    var raw = _serializer.FromJson <dynamic[]>(msg.Value);

                    foreach (var rawContentAndEnvelope in raw)
                    {
                        var eventSourceId   = (EventSourceId)Guid.Parse(rawContentAndEnvelope.Content.EventSourceId.ToString());
                        var eventIdentifier = _applicationResourceIdentifierConverter.FromString(rawContentAndEnvelope.Envelope.Event.ToString());
                        var version         = EventSourceVersion.FromCombined((double)rawContentAndEnvelope.Envelope.Version);
                        var correlationId   = (TransactionCorrelationId)Guid.Parse(rawContentAndEnvelope.Envelope.CorrelationId.ToString());
                        CorrelationId = correlationId;

                        _logger.Trace($"Received event of with resource name '{eventIdentifier.Resource.Name}' from '{eventSourceId}' with version '{version}' in correlation '{correlationId}'");
                        var eventType = _eventTypes.SingleOrDefault(et => et.Name == eventIdentifier.Resource.Name);
                        if (eventType != null)
                        {
                            _logger.Trace("Matching Event Type : " + eventType.AssemblyQualifiedName);
                            var @event = Activator.CreateInstance(eventType, eventSourceId) as IEvent;
                            _serializer.FromJson(@event, rawContentAndEnvelope.Content.ToString());

                            var eventSource            = new ExternalSource(eventSourceId);
                            var uncommittedEventStream = new UncommittedEventStream(eventSource);
                            uncommittedEventStream.Append(@event, version);


                            _logger.Information($"Committing uncommitted event stream with correlationId '{correlationId}'");
                            var envelopes        = _eventEnvelopes.CreateFrom(eventSource, uncommittedEventStream.EventsAndVersion);
                            var envelopesAsArray = envelopes.ToArray();
                            var eventsAsArray    = uncommittedEventStream.ToArray();

                            _logger.Trace("Create an array of events and envelopes");
                            var eventsAndEnvelopes = new List <EventAndEnvelope>();
                            for (var eventIndex = 0; eventIndex < eventsAsArray.Length; eventIndex++)
                            {
                                var envelope     = envelopesAsArray[eventIndex];
                                var currentEvent = eventsAsArray[eventIndex];
                                eventsAndEnvelopes.Add(new EventAndEnvelope(
                                                           envelope
                                                           .WithTransactionCorrelationId(correlationId)
                                                           .WithSequenceNumber(_eventSequenceNumbers.Next())
                                                           .WithSequenceNumberForEventType(_eventSequenceNumbers.NextForType(envelope.Event)),
                                                           currentEvent
                                                           ));
                            }

                            _logger.Trace("Committing events to event store");
                            _eventStore.Commit(eventsAndEnvelopes);

                            _logger.Trace($"Set event source versions for the event source '{envelopesAsArray[0].EventSource}' with id '{envelopesAsArray[0].EventSourceId}'");
                            _eventSourceVersions.SetFor(envelopesAsArray[0].EventSource, envelopesAsArray[0].EventSourceId, envelopesAsArray[envelopesAsArray.Length - 1].Version);

                            _logger.Trace("Create a committed event stream");
                            var committedEventStream = new CommittedEventStream(uncommittedEventStream.EventSourceId, eventsAndEnvelopes);
                            _committedEventStreamBridge.Send(committedEventStream);

                            CorrelationId = Guid.Empty;
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.Error(ex, "Error during receiving");
                }
            };
        }
コード例 #38
0
        void Received(Topic topic, string eventAsJson)
        {
            try
            {
                _logger.Trace($"Message received 'eventAsJson'");
                dynamic raw = JsonConvert.DeserializeObject(eventAsJson);

                foreach (var rawContentAndEnvelope in raw)
                {
                    var eventSourceId   = (EventSourceId)Guid.Parse(rawContentAndEnvelope.Envelope.EventSourceId.ToString());
                    var eventIdentifier = _applicationResourceIdentifierConverter.FromString(rawContentAndEnvelope.Envelope.Event.ToString());
                    var version         = EventSourceVersion.FromCombined((double)rawContentAndEnvelope.Envelope.Version);
                    var correlationId   = (TransactionCorrelationId)Guid.Parse(rawContentAndEnvelope.Envelope.CorrelationId.ToString());
                    var eventSource     = new ExternalSource(eventSourceId);
                    CorrelationId = correlationId;

                    _logger.Trace($"Received event of with resource name '{eventIdentifier.Resource.Name}' from '{eventSourceId}' with version '{version}' in correlation '{correlationId}'");
                    var eventType = _eventTypes.SingleOrDefault(et => et.Name == eventIdentifier.Resource.Name);
                    if (eventType != null)
                    {
                        _logger.Trace("Matching Event Type : " + eventType.AssemblyQualifiedName);
                        var @event = GetEventFrom(rawContentAndEnvelope, eventSourceId, eventType);

                        var uncommittedEventStream = new UncommittedEventStream(eventSource);
                        uncommittedEventStream.Append(@event, version);


                        _logger.Information($"Committing uncommitted event stream with correlationId '{correlationId}'");
                        var envelopes = _eventEnvelopes.CreateFrom(eventSource, uncommittedEventStream.EventsAndVersion);

                        var envelopesAsArray = envelopes.ToArray();
                        var eventsAsArray    = uncommittedEventStream.ToArray();

                        _logger.Trace("Create an array of events and envelopes");
                        var eventsAndEnvelopes = new List <EventAndEnvelope>();
                        for (var eventIndex = 0; eventIndex < eventsAsArray.Length; eventIndex++)
                        {
                            var envelope     = envelopesAsArray[eventIndex];
                            var currentEvent = eventsAsArray[eventIndex];
                            eventsAndEnvelopes.Add(new EventAndEnvelope(
                                                       envelope
                                                       .WithTransactionCorrelationId(correlationId)
                                                       .WithSequenceNumber(_eventSequenceNumbers.Next())
                                                       .WithSequenceNumberForEventType(_eventSequenceNumbers.NextForType(envelope.Event)),
                                                       currentEvent
                                                       ));
                        }

                        _logger.Trace("Committing events to event store");
                        _eventStore.Commit(eventsAndEnvelopes);

                        _logger.Trace($"Set event source versions for the event source '{envelopesAsArray[0].EventSource}' with id '{envelopesAsArray[0].EventSourceId}'");
                        _eventSourceVersions.SetFor(envelopesAsArray[0].EventSource, envelopesAsArray[0].EventSourceId, envelopesAsArray[envelopesAsArray.Length - 1].Version);

                        _logger.Trace("Create a committed event stream");
                        var committedEventStream = new CommittedEventStream(uncommittedEventStream.EventSourceId, eventsAndEnvelopes);
                        _committedEventStreamBridge.Send(committedEventStream);

                        CorrelationId = Guid.Empty;
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Error during receiving");
            }
        }