Example #1
0
        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);
            }
        }
Example #2
0
        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)));
        }
Example #3
0
        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));
        }
Example #4
0
        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));
        }
Example #5
0
 public static IEnumerable <object> GetEvents(this Commit commit, IReadOnlyDictionary <Type, IMapEventDataToObject> upc)
 {
     return(Utils.UnpackEvents(commit.Timestamp, commit.EventData, upc));
 }