Res.Core.Storage.InMemoryEventStorage.Store C# (CSharp) Method

Store() public method

public Store ( CommitsForStorage commits ) : CommitResults
commits CommitsForStorage
return CommitResults
        public CommitResults Store(CommitsForStorage commits)
        {
            var unSuccessful = new List<Guid>();

            var commitsToSave = commits.Commits.Where(x => x.Events.Length > 0);
            var entries = commitsToSave.OrderBy(x => x.Events.Min(y => y.Timestamp));

            foreach (var commit in entries)
            {
                var expectedVersion = getExpectedVersion(commit);
                var versionForCommit = commit.Events.Length > 0 ? commit.Events.Min(x => x.Sequence) : 0;

                if (expectedVersion != versionForCommit && versionForCommit != ExpectedVersion.Any)
                {
                    unSuccessful.Add(commit.CommitId);
                    continue;
                }

                for (int index = 0; index < commit.Events.Length; index++)
                {
                    var e = commit.Events[index];

                    var version = e.Sequence == -1 ? expectedVersion + index : e.Sequence;

                    _globalSequence++;

                    _events.Add(new EventInStorage(e.EventId, commit.Context, commit.Stream,
                        version,
                        _globalSequence,
                        e.Timestamp,
                        e.TypeKey, e.Headers, e.Body));
                }
            }

            var successful = commits.Commits.Where(x => unSuccessful.Contains(x.CommitId) == false).Select(x => x.CommitId).ToArray();

            ++WriteCount;

            return new CommitResults(successful.ToArray(), unSuccessful.ToArray());
        }