예제 #1
0
        private void Add(StoredEvent @event)
        {
            DeserializedEventStore.TryAdd(@event);

            _queue.QueueBackgroundWorkItem(async token =>
            {
                var payload = SerializeObject(DeserializedEventStore
                                              .GetStoredEvents().Concat(new StoredEvent[1] {
                    @event
                }));

                File.WriteAllText($@"{Environment.CurrentDirectory}\storedEvents.json", payload);
                await Task.CompletedTask;
            });
        }
예제 #2
0
        public T Query <T>(Guid id)
            where T : AggregateRoot
        {
            var list = new List <DomainEvent>();

            foreach (var storedEvent in DeserializedEventStore.Get())
            {
                if (storedEvent.StreamId == id)
                {
                    list.Add(storedEvent.Data as DomainEvent);
                }
            }

            return(Load <T>(list));
        }
예제 #3
0
        public TAggregateRoot Query <TAggregateRoot>(string propertyName, string value)
            where TAggregateRoot : AggregateRoot
        {
            var type = typeof(TAggregateRoot);
            var prop = type.GetProperty(propertyName);

            if (prop == null)
            {
                return(null);
            }

            foreach (var deserializedStoredEvent in DeserializedEventStore.Get())
            {
                if ($"{prop.GetValue(deserializedStoredEvent.Data, null)}" == value)
                {
                    return(Query <TAggregateRoot>(deserializedStoredEvent.StreamId) as TAggregateRoot);
                }
            }

            return(null);
        }
예제 #4
0
        public IEnumerable <TAggregateRoot> Query <TAggregateRoot>()
            where TAggregateRoot : AggregateRoot
        {
            var aggregates = new List <TAggregateRoot>();
            var streamIds  = new List <Guid>();
            var name       = typeof(TAggregateRoot).Name;

            foreach (var @event in DeserializedEventStore.Get())
            {
                if (@event.Aggregate == name && !streamIds.Contains(@event.StreamId))
                {
                    streamIds.Add(@event.StreamId);
                }
            }

            foreach (var streamId in streamIds)
            {
                aggregates.Add(Query <TAggregateRoot>(streamId));
            }

            return(aggregates);
        }