public async Task <TAggregate> LoadAggregate <TAggregate>(object aggregateID) { Func <IEnumerable <IEvent>, object> builder; if (_builders.TryGetValue(typeof(TAggregate), out builder) == false) { throw new BuilderNotFoundException(_builders.Keys, typeof(TAggregate)); } var aggregatePath = AggregatePath(_root, typeof(TAggregate), aggregateID); var fsEvents = await _fileSystem.FileExists(aggregatePath) ? (await _fileSystem.ReadFileLines(aggregatePath)) .Select(e => JsonConvert.DeserializeObject(e, JsonSerializerSettings)) .Cast <IEvent>() : Enumerable.Empty <IEvent>(); var sessionEvents = _pending.EventsFor <TAggregate>(aggregateID); var events = fsEvents .Concat(sessionEvents) .ToArray(); if (events.Any() == false) { throw new AggregateNotFoundException(typeof(TAggregate), aggregateID); } var aggregate = builder(events); return((TAggregate)aggregate); }
public Task <TAggregate> LoadAggregate <TAggregate>(object aggregateID) { Func <IEnumerable <IEvent>, object> builder; if (_builders.TryGetValue(typeof(TAggregate), out builder) == false) { throw new BuilderNotFoundException(_builders.Keys, typeof(TAggregate)); } var eventsToLoad = new List <IEvent>(); eventsToLoad.AddRange(_storeEvents.EventsFor <TAggregate>(aggregateID)); eventsToLoad.AddRange(_pendingEvents.EventsFor <TAggregate>(aggregateID)); if (eventsToLoad.Any() == false) { throw new AggregateNotFoundException(typeof(TAggregate), aggregateID); } var aggregate = builder(eventsToLoad); return(Task.FromResult((TAggregate)aggregate)); }