Skip to content

Commit

Permalink
Query all events (#33)
Browse files Browse the repository at this point in the history
* Implement querying over all events in the store

* Fix naming
  • Loading branch information
Tomas Lycken authored Oct 31, 2017
1 parent fb3fb0b commit 2b018b8
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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<string, StringEvent, IEventMetadata<string>>;
var events = await store.Events();
Assert.Equal(5, events.Count());
}

[Fact]
public async Task ReturnsAllEventsAccordingToQuery()
{
var store = _fixture.BuildEventStore(_dbContext) as IEventStream<string, StringEvent, IEventMetadata<string>>;
var events = await store.Events(es => es.Where(e => e.Version > 1));
Assert.Equal(3, events.Count());
}
}
}
18 changes: 17 additions & 1 deletion src/RdbmsEventStore.EntityFramework/EntityFrameworkEventStore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,23 @@ public EntityFrameworkEventStore(TContext context, IEventFactory<TStreamId, TEve
_serializer = serializer;
}

public Task<IEnumerable<TEvent>> Events(TStreamId streamId) => Events(streamId, query => query);
public Task<IEnumerable<TEvent>> Events() => Events(events => events);

public async Task<IEnumerable<TEvent>> Events(Func<IQueryable<TEventMetadata>, IQueryable<TEventMetadata>> query)
{
var storedEvents = await context.Events
.AsNoTracking()
.Apply(query)
.ToListAsync();

var events = storedEvents
.Cast<TPersistedEvent>()
.Select(_serializer.Deserialize);

return events;
}

public Task<IEnumerable<TEvent>> Events(TStreamId streamId) => Events(streamId, events => events);

public async Task<IEnumerable<TEvent>> Events(TStreamId streamId, Func<IQueryable<TEventMetadata>, IQueryable<TEventMetadata>> query)
{
Expand Down
4 changes: 4 additions & 0 deletions src/RdbmsEventStore/IEventStream.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ public interface IEventStream<in TStreamId, TEvent, TEventMetadata>
where TEvent : IEvent<TStreamId>, TEventMetadata
where TEventMetadata : IEventMetadata<TStreamId>
{
Task<IEnumerable<TEvent>> Events();

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

Task<IEnumerable<TEvent>> Events(TStreamId streamId);

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

0 comments on commit 2b018b8

Please sign in to comment.