Example #1
0
        public async Task <T> GetAsync(T snapshoot, CancellationToken cancellationToken)
        {
            if (!snapshoot.IsVersionSync)
            {
                throw new VersionNotAccurateException();
            }

            var snapshootVersion = snapshoot.Version;
            var lastVersion      = await EventStore.GetAggregateLastVersionAsync(AggregateType, snapshoot.Id, cancellationToken);

            if (snapshootVersion < lastVersion)
            {
                var events = await EventStore.GetAggregateEvents(AggregateType, snapshoot.Id, snapshootVersion, cancellationToken).ToListAsync(cancellationToken);

                snapshoot.UpdateFromStore(events);
            }

            Aggregates.TryAdd(snapshoot.Id, snapshoot);
            EventStore.TryAddEventContainer(snapshoot);

            return(snapshoot);
        }