Exemplo n.º 1
0
        /// <inheritdoc />
        protected override async Task SaveAsync(VersionableEvent versionableEvent, IDictionary <string, object> headers)
        {
            var eventDescriptor = new EventDescriptor(this.AggregateType, this.AggregateId, versionableEvent, headers);

            await this.documentSession.StoreAsync(eventDescriptor).ConfigureAwait(false);

            await this.documentSession.SaveChangesAsync().ConfigureAwait(false);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Creates a new instance of <see cref="EventDescriptor"/>
 /// </summary>
 /// <param name="aggregateType">The full CLR name of the aggregate root</param>
 /// <param name="aggregateId">The id of the aggregate root</param>
 /// <param name="versionableEvent">The versionable event</param>
 /// <param name="headers">A list of arbitrary headers</param>
 public EventDescriptor(string aggregateType, Guid aggregateId, VersionableEvent versionableEvent, IDictionary <string, object> headers)
 {
     this.AggregateType = aggregateType;
     this.AggregateId   = aggregateId;
     this.Version       = versionableEvent.Version;
     this.Timestamp     = DateTime.Now;
     this.EventType     = versionableEvent.InnerEvent.GetFullName();
     this.Event         = versionableEvent.InnerEvent;
     this.Headers       = new Dictionary <string, object>(headers);
 }
Exemplo n.º 3
0
        public async Task CanSaveAndReplayEvents()
        {
            var firstEvent  = new VersionableEvent(new ValueEvent(11)).With(1);
            var secondEvent = new VersionableEvent(new ValueEvent(22)).With(2);

            var events = new[] { firstEvent, secondEvent };

            await this.testee
            .SaveAsync(events, 1, new Dictionary <string, object>())
            .ConfigureAwait(false);

            var replayedEvents = await this.testee.ReplayAsync().ConfigureAwait(false);

            replayedEvents.Should().HaveCount(2);
            replayedEvents.Should().Contain(e => (e as ValueEvent).Value == 11);
            replayedEvents.Should().Contain(e => (e as ValueEvent).Value == 22);
        }
Exemplo n.º 4
0
        /// <inheritdoc />
        protected override async Task SaveAsync(VersionableEvent versionableEvent, IDictionary <string, object> headers)
        {
            var eventDescriptor = new SqlEventDescriptor(this.AggregateType, this.AggregateId, versionableEvent, headers);

            using (var connection = await this.factory.CreateAsync(this.connectionStringName).ConfigureAwait(false))
                using (var command = new SqlCommand(SqlCommands.InsertEvent, connection))
                {
                    command.AddParameter("@AggregateType", eventDescriptor.AggregateType);
                    command.AddParameter("@AggregateId", eventDescriptor.AggregateId);
                    command.AddParameter("@Version", eventDescriptor.Version);
                    command.AddParameter("@Timestamp", eventDescriptor.Timestamp);
                    command.AddParameter("@EventType", eventDescriptor.EventType);
                    command.AddParameter("@EventData", eventDescriptor.SerializedEvent);
                    command.AddParameter("@Headers", eventDescriptor.SerializedHeaders);

                    await command.ExecuteNonQueryAsync().ConfigureAwait(false);
                }
        }
Exemplo n.º 5
0
        public void CanCreateInstanceWithParameters()
        {
            var aggregateType    = typeof(MyDynamicEventSourcedAggregateRoot).FullName;
            var aggregateId      = Guid.NewGuid();
            var versionableEvent = new VersionableEvent(new ValueEvent(11)).With(1);
            var headers          = new Dictionary <string, object> {
                { "UserName", "Patrick" }, { "MagicNumber", 42 }
            };

            var testee = new EventDescriptor(aggregateType, aggregateId, versionableEvent, headers);

            testee.AggregateType.Should().Be(aggregateType);
            testee.AggregateId.Should().Be(aggregateId);
            testee.Version.Should().Be(1);
            testee.Timestamp.Should().BeCloseTo(DateTime.Now, 1000);
            testee.EventType.Should().Be("SimpleDomain.TestDoubles.ValueEvent");
            testee.Event.Should().BeSameAs(versionableEvent.InnerEvent);
            testee.Headers.Should().Contain("UserName", "Patrick").And.Contain("MagicNumber", 42);
        }
Exemplo n.º 6
0
 /// <summary>
 /// Persists a single versionable event
 /// </summary>
 /// <param name="versionableEvent">The versionable event</param>
 /// <param name="headers">A list of arbitrary headers</param>
 protected abstract Task SaveAsync(VersionableEvent versionableEvent, IDictionary <string, object> headers);
Exemplo n.º 7
0
 /// <inheritdoc />
 protected override Task SaveAsync(VersionableEvent versionableEvent, IDictionary <string, object> headers)
 {
     this.eventDescriptors.Add(new EventDescriptor(this.AggregateType, this.AggregateId, versionableEvent, headers));
     return(Task.CompletedTask);
 }
Exemplo n.º 8
0
 /// <summary>
 /// Creates a new instance of <see cref="SqlEventDescriptor"/>
 /// </summary>
 /// <param name="aggregateType">The full CLR name of the aggregate root</param>
 /// <param name="aggregateId">The id of the aggregate root</param>
 /// <param name="versionableEvent">The versionable event</param>
 /// <param name="headers">A list of arbitrary headers</param>
 public SqlEventDescriptor(string aggregateType, Guid aggregateId, VersionableEvent versionableEvent, IDictionary <string, object> headers)
     : base(aggregateType, aggregateId, versionableEvent, headers)
 {
     this.SerializedEvent   = JsonConvert.SerializeObject(versionableEvent.InnerEvent);
     this.SerializedHeaders = JsonConvert.SerializeObject(headers);
 }