Beispiel #1
0
        public async Task ProcessChangesAsync(
            IChangeFeedObserverContext context,
            IReadOnlyList <Document> docs,
            CancellationToken cancellationToken)
        {
            foreach (var doc in docs)
            {
                log.Info($"Processing changes for document {doc.Id}");

                var item = (dynamic)doc;

                if (item.Outbox.Count > 0)
                {
                    ProcessDocumentMessages message = ProcessDocumentMessages.New <T>(item);

                    await Program.Endpoint.SendLocal(message);
                }
            }
        }
Beispiel #2
0
        public async Task Dispatch(ProcessDocumentMessages command)
        {
            var documentType = Type.GetType(command.DocumentType);
            var repository   = GetRepository(documentType);
            var document     = await repository.FindById(command.DocumentId);

            if (document == null)
            {
                return;
            }

            foreach (var message in document.Outbox.ToArray())
            {
                var handler = GetHandler(message);

                await handler.Handle(message, _serviceFactory);

                document.ProcessDocumentMessage(message);

                await repository.Update(document);
            }
        }