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()); } }
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))); }
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); }
private object DeserializePayload(IJsonProcessor jsonProcessor, Type type) => jsonProcessor.FromJson(json: Payload, dataType: type);