public void GenerateReadModel(string operationName, Action <dynamic> modelUpdater, Action <IConfigReadModelGeneration> config = null) { operationName.MustNotBeEmpty(); var conf = new ReadModelGenerationConfig(operationName); config?.Invoke(conf); void HandleCommit(Commit commit, Action <dynamic> updater) { var evs = Utils.UnpackEvents(commit.Timestamp, commit.EventData, _settings.EventMappers); foreach (var ev in evs) { EventStore.Logger.Debug("Updating readmodel from {@event}", ev); updater((dynamic)ev); } } using (var operation = new BatchOperation(_store, conf)) { Optional <Commit> commit; do { commit = operation.GetNextCommit(); if (commit.HasValue) { HandleCommit(commit.Value, modelUpdater); } } while (commit.HasValue); } }
private EntityEvents ConvertToEntityEvents(EntityStreamData raw) { Optional <object> GetSnapshot(string sData) { if (sData.IsNullOrEmpty()) { return(Optional <object> .Empty); } return(new Optional <object>(Utils.UnpackSnapshot(sData))); } IReadOnlyCollection <object> GetEvents(IEnumerable <Commit> commits) => commits.SelectMany(d => Utils.UnpackEvents(d.Timestamp, d.EventData, _settings.EventMappers)).ToArray(); return(new EntityEvents(GetEvents(raw.Commits), raw.Commits.Max(d => d.Version), GetSnapshot(raw.LatestSnapshot.ValueOr(null)?.SerializedData))); }
public async Task Append(string tenantId, Guid entityId, Guid commitId, params object[] events) { tenantId.MustNotBeEmpty(); entityId.MustNotBeDefault(); commitId.MustNotBeDefault(); if (events.IsNullOrEmpty()) { return; } var commit = new UnversionedCommit(tenantId, entityId, Utils.PackEvents(events), commitId, DateTimeOffset.Now); var dbgInfo = new{ tenantId, entityId, commitId }; EventStore.Logger.Debug("Appending {@commit} with events {@events}", dbgInfo, events); var rez = await _store.Append(commit); if (rez.WasSuccessful) { EventStore.Logger.Debug("Append succesful for commit {@commit}", dbgInfo); return; } throw new DuplicateCommitException(commitId, Utils.UnpackEvents(commit.Timestamp, commit.EventData, _settings.EventMappers)); }
public Commit Rewrite(Commit commit) { var evs = Utils.UnpackEvents(commit.Timestamp, commit.EventData, _mapps); return(new Commit(commit.TenantId, commit.EntityId, Utils.PackEvents(evs), commit.CommitId, commit.Timestamp, commit.Version)); }
public static IEnumerable <object> GetEvents(this Commit commit, IReadOnlyDictionary <Type, IMapEventDataToObject> upc) { return(Utils.UnpackEvents(commit.Timestamp, commit.EventData, upc)); }