Skip to content

Commit 2b018b8

Browse files
author
Tomas Lycken
authored
Query all events (#33)
* Implement querying over all events in the store * Fix naming
1 parent fb3fb0b commit 2b018b8

3 files changed

Lines changed: 37 additions & 1 deletion

File tree

src/RdbmsEventStore.EntityFramework.Tests/EventStoreTests/QueryEventsTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,21 @@ public async Task ReturnsEventsAccordingToQuery(string streamId, long expectedCo
4646
var events = await store.Events(streamId, es => es.Where(e => e.Version > 1));
4747
Assert.Equal(expectedCount, events.Count());
4848
}
49+
50+
[Fact]
51+
public async Task ReturnsAllEvents()
52+
{
53+
var store = _fixture.BuildEventStore(_dbContext) as IEventStream<string, StringEvent, IEventMetadata<string>>;
54+
var events = await store.Events();
55+
Assert.Equal(5, events.Count());
56+
}
57+
58+
[Fact]
59+
public async Task ReturnsAllEventsAccordingToQuery()
60+
{
61+
var store = _fixture.BuildEventStore(_dbContext) as IEventStream<string, StringEvent, IEventMetadata<string>>;
62+
var events = await store.Events(es => es.Where(e => e.Version > 1));
63+
Assert.Equal(3, events.Count());
64+
}
4965
}
5066
}

src/RdbmsEventStore.EntityFramework/EntityFrameworkEventStore.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,23 @@ public EntityFrameworkEventStore(TContext context, IEventFactory<TStreamId, TEve
2828
_serializer = serializer;
2929
}
3030

31-
public Task<IEnumerable<TEvent>> Events(TStreamId streamId) => Events(streamId, query => query);
31+
public Task<IEnumerable<TEvent>> Events() => Events(events => events);
32+
33+
public async Task<IEnumerable<TEvent>> Events(Func<IQueryable<TEventMetadata>, IQueryable<TEventMetadata>> query)
34+
{
35+
var storedEvents = await context.Events
36+
.AsNoTracking()
37+
.Apply(query)
38+
.ToListAsync();
39+
40+
var events = storedEvents
41+
.Cast<TPersistedEvent>()
42+
.Select(_serializer.Deserialize);
43+
44+
return events;
45+
}
46+
47+
public Task<IEnumerable<TEvent>> Events(TStreamId streamId) => Events(streamId, events => events);
3248

3349
public async Task<IEnumerable<TEvent>> Events(TStreamId streamId, Func<IQueryable<TEventMetadata>, IQueryable<TEventMetadata>> query)
3450
{

src/RdbmsEventStore/IEventStream.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ public interface IEventStream<in TStreamId, TEvent, TEventMetadata>
99
where TEvent : IEvent<TStreamId>, TEventMetadata
1010
where TEventMetadata : IEventMetadata<TStreamId>
1111
{
12+
Task<IEnumerable<TEvent>> Events();
13+
14+
Task<IEnumerable<TEvent>> Events(Func<IQueryable<TEventMetadata>, IQueryable<TEventMetadata>> query);
15+
1216
Task<IEnumerable<TEvent>> Events(TStreamId streamId);
1317

1418
Task<IEnumerable<TEvent>> Events(TStreamId streamId, Func<IQueryable<TEventMetadata>, IQueryable<TEventMetadata>> query);

0 commit comments

Comments
 (0)