public async Task ProcessDocument(Document document, [FromServices] IConfiguration config, [FromServices] DaprClient dapr, [FromServices] ILogger <Create> logger) { logger.LogInformation("Revieved Document: {id} from Service: {service} at {time}", document.Id, document.ExternalServiceName, document.ProcessedUtc); if (DateTime.UtcNow.Second % 2 == 0) { var errorDoc = document with { Body = Array.Empty <byte>() }; var data = JsonSerializer.Serialize(errorDoc); throw new ApplicationException($"Error while receiving document {data}"); } var state = await dapr.GetStateEntryAsync <Document>(config.GetValue <string>("DocumentStore"), document.Id.ToString()); DocumentProcessResult result = state.Value switch { null => new(document, ProcessType.Insert), { } d when !d.Equals(document) => new(document, ProcessType.Update), _ => new(state.Value, ProcessType.Unchanged) }; state.Value = result.Document; await state.SaveAsync(); logger.LogInformation("Updated state for Document: {id} - {processType}", result.Document.Id, result.ProcessType.ToString()); await dapr.PublishEventAsync(config.GetValue <string>("DocumentPubSub"), config.GetValue <string>("DocumentProcessedTopic"), result); }
public DocumentProcessResult Apply(ICollection <CodeSnippet> snippets) { var result = new DocumentProcessResult(); var inputFiles = new[] { "*.md", "*.mdown", "*.markdown" }.SelectMany( extension => Directory.GetFiles(docsFolder, extension, SearchOption.AllDirectories)) .ToArray(); result.Count = inputFiles.Count(); foreach (var inputFile in inputFiles) { var fileResult = Apply(snippets, inputFile); if (fileResult.RequiredSnippets.Any()) { // give up if we can't continue result.Include(fileResult.RequiredSnippets); return(result); } result.Include(fileResult.Snippets); File.WriteAllText(inputFile, fileResult.Text); } return(result); }