Line data Source code
1 : using System;
2 : using System.Collections.Generic;
3 : using System.Linq;
4 : using Cqrs.Events;
5 :
6 : namespace Cqrs.Ninject.InProcess.EventStore
7 : {
8 : public class InProcessEventStore<TAuthenticationToken> : IEventStore<TAuthenticationToken>
9 0 : {
10 : protected IDictionary<Guid, IList<IEvent<TAuthenticationToken>>> InMemoryDb { get; private set; }
11 :
12 0 : public InProcessEventStore()
13 : {
14 : InMemoryDb = new Dictionary<Guid, IList<IEvent<TAuthenticationToken>>>();
15 : }
16 :
17 0 : public void Save(Type aggregateRootType, IEvent<TAuthenticationToken> @event)
18 : {
19 : IList<IEvent<TAuthenticationToken>> list;
20 : InMemoryDb.TryGetValue(@event.Id, out list);
21 : if (list == null)
22 : {
23 : list = new List<IEvent<TAuthenticationToken>>();
24 : InMemoryDb.Add(@event.Id, list);
25 : }
26 : list.Add(@event);
27 : }
28 :
29 0 : public IEnumerable<IEvent<TAuthenticationToken>> Get<T>(Guid aggregateId, bool useLastEventOnly = false, int fromVersion = -1)
30 : {
31 : return Get(typeof(T), aggregateId, useLastEventOnly, fromVersion);
32 : }
33 :
34 0 : public IEnumerable<IEvent<TAuthenticationToken>> Get(Type aggregateType, Guid aggregateId, bool useLastEventOnly = false, int fromVersion = -1)
35 : {
36 : IList<IEvent<TAuthenticationToken>> events;
37 : InMemoryDb.TryGetValue(aggregateId, out events);
38 : return events != null
39 : ? events.Where(x => x.Version > fromVersion)
40 : : new List<IEvent<TAuthenticationToken>>();
41 : }
42 :
43 0 : public IEnumerable<EventData> Get(Guid correlationId)
44 : {
45 : return Enumerable.Empty<EventData>();
46 : }
47 :
48 0 : public void Save<T>(IEvent<TAuthenticationToken> @event)
49 : {
50 : Save(typeof(T), @event);
51 : }
52 : }
53 : }
|