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