From 2b018b874c33fcccbe9cfaefe15b6304f39abf36 Mon Sep 17 00:00:00 2001 From: Tomas Lycken Date: Tue, 31 Oct 2017 10:55:59 +0100 Subject: [PATCH] Query all events (#33) * Implement querying over all events in the store * Fix naming --- .../EventStoreTests/QueryEventsTests.cs | 16 ++++++++++++++++ .../EntityFrameworkEventStore.cs | 18 +++++++++++++++++- src/RdbmsEventStore/IEventStream.cs | 4 ++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/RdbmsEventStore.EntityFramework.Tests/EventStoreTests/QueryEventsTests.cs b/src/RdbmsEventStore.EntityFramework.Tests/EventStoreTests/QueryEventsTests.cs index 1c75eb8..3e552d8 100644 --- a/src/RdbmsEventStore.EntityFramework.Tests/EventStoreTests/QueryEventsTests.cs +++ b/src/RdbmsEventStore.EntityFramework.Tests/EventStoreTests/QueryEventsTests.cs @@ -46,5 +46,21 @@ public async Task ReturnsEventsAccordingToQuery(string streamId, long expectedCo var events = await store.Events(streamId, es => es.Where(e => e.Version > 1)); Assert.Equal(expectedCount, events.Count()); } + + [Fact] + public async Task ReturnsAllEvents() + { + var store = _fixture.BuildEventStore(_dbContext) as IEventStream>; + var events = await store.Events(); + Assert.Equal(5, events.Count()); + } + + [Fact] + public async Task ReturnsAllEventsAccordingToQuery() + { + var store = _fixture.BuildEventStore(_dbContext) as IEventStream>; + var events = await store.Events(es => es.Where(e => e.Version > 1)); + Assert.Equal(3, events.Count()); + } } } \ No newline at end of file diff --git a/src/RdbmsEventStore.EntityFramework/EntityFrameworkEventStore.cs b/src/RdbmsEventStore.EntityFramework/EntityFrameworkEventStore.cs index 5d8a6d7..6d86fad 100644 --- a/src/RdbmsEventStore.EntityFramework/EntityFrameworkEventStore.cs +++ b/src/RdbmsEventStore.EntityFramework/EntityFrameworkEventStore.cs @@ -28,7 +28,23 @@ public EntityFrameworkEventStore(TContext context, IEventFactory> Events(TStreamId streamId) => Events(streamId, query => query); + public Task> Events() => Events(events => events); + + public async Task> Events(Func, IQueryable> query) + { + var storedEvents = await context.Events + .AsNoTracking() + .Apply(query) + .ToListAsync(); + + var events = storedEvents + .Cast() + .Select(_serializer.Deserialize); + + return events; + } + + public Task> Events(TStreamId streamId) => Events(streamId, events => events); public async Task> Events(TStreamId streamId, Func, IQueryable> query) { diff --git a/src/RdbmsEventStore/IEventStream.cs b/src/RdbmsEventStore/IEventStream.cs index 7606a18..6a61fde 100644 --- a/src/RdbmsEventStore/IEventStream.cs +++ b/src/RdbmsEventStore/IEventStream.cs @@ -9,6 +9,10 @@ public interface IEventStream where TEvent : IEvent, TEventMetadata where TEventMetadata : IEventMetadata { + Task> Events(); + + Task> Events(Func, IQueryable> query); + Task> Events(TStreamId streamId); Task> Events(TStreamId streamId, Func, IQueryable> query);