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());
}