public async Task <IEnumerable <object> > QueryEvents(
            Guid streamId, long fromVersion)
        {
            using (EventStoreContext context = _contextFactory.Invoke())
            {
                string stateType = _typeResolver.ResolveTypeName <T>();

                IQueryable <StreamEvent> query =
                    from e in context.StreamEvents
                    where
                    e.StateType == stateType &&
                    e.StreamId == streamId &&
                    e.Version >= fromVersion
                    orderby e.Version ascending
                    select e;

                IEnumerable <object> sequence =
                    from e in await query
                    .AsNoTracking()
                    .ToListAsync()
                    .ConfigureAwait(continueOnCapturedContext: false)
                    let value                       = e.Payload
                                           let type = _typeResolver.TryResolveType(e.EventType)
                                                      select _jsonProcessor.FromJson(value, type);

                return(sequence.ToImmutableArray());
            }
        }
Exemplo n.º 2
0
        public static Message GenerateMessage(
            this IEvent entity,
            TypeResolver typeResolver,
            IJsonProcessor jsonProcessor)
        {
            Type type = typeResolver.TryResolveType(entity.EventType);

            ConstructorInfo constructor = typeof(StreamEvent <>)
                                          .MakeGenericType(type)
                                          .GetTypeInfo()
                                          .GetConstructor(new[]
            {
                typeof(Guid),
                typeof(long),
                typeof(DateTime),
                type,
            });

            object data = constructor.Invoke(parameters: new object[]
            {
                entity.StreamId,
                entity.Version,
                new DateTime(entity.RaisedTimeUtc.Ticks, DateTimeKind.Utc),
                jsonProcessor.FromJson(entity.Payload, type),
            });

            var tracingProperties = new TracingProperties(
                entity.OperationId,
                entity.Contributor,
                entity.ParentId);

            return(new Message(id: entity.MessageId, data, tracingProperties));
        }
        public static T FromJson <T>(this IJsonProcessor jsonProcessor, string json)
        {
            if (jsonProcessor is null)
            {
                throw new ArgumentNullException(nameof(jsonProcessor));
            }

            return((T)jsonProcessor.FromJson(json, dataType: typeof(T)));
        }
Exemplo n.º 4
0
        public void ConvertToEvent_serializes_data_correctly(
            string id,
            MessageData1 data,
            TracingProperties tracingProperties,
            [Frozen] IJsonProcessor jsonProcessor,
            EventConverter sut)
        {
            var message = new Message(id, data, tracingProperties);

            EventData actual = sut.ConvertToEvent(message);

            string       body    = Encoding.UTF8.GetString(actual.Body.Array);
            MessageData1 content = jsonProcessor.FromJson <MessageData1>(body);

            content.Should().BeEquivalentTo(data);
        }
Exemplo n.º 5
0
 private object DeserializePayload(IJsonProcessor jsonProcessor, Type type)
 => jsonProcessor.FromJson(json: Payload, dataType: type);