public async Task Consume(ConsumeContext <ValidateStandardize> context)
        {
            try
            {
                using (var blob = await blobStorage.GetFileAsync(context.Message.BlobId, context.Message.Bucket))
                {
                    StreamReader reader = new StreamReader(blob.GetContentAsStream());
                    string       mol    = reader.ReadToEnd();

                    var validResult    = validation.Validate(mol);
                    var standardResult = standardization.Standardize(mol);

                    var newId  = Guid.NewGuid();
                    var issues = standardResult.Issues.Concat(validResult.Issues);

                    var record = new StandardizedValidatedRecord
                    {
                        StandardizedId = newId,
                        Issues         = IssuesResolver.ResolveIssues(issues, issuesConfig)
                    };
                    var bucket = context.Message.Id.ToString();

                    await blobStorage.AddFileAsync(newId, $"{newId}.mol", new MemoryStream(Encoding.UTF8.GetBytes(standardResult.Standardized)), "chemical/x-mdl-molfile", bucket);

                    await context.Publish <ValidatedStandardized>(new
                    {
                        Id            = context.Message.Id,
                        Record        = record,
                        UserId        = context.Message.UserId,
                        TimeStamp     = DateTimeOffset.UtcNow,
                        CorrelationId = context.Message.CorrelationId
                    });
                }
            }
            catch (Exception ex)
            {
                await context.Publish <StandardizationValidationFailed>(new
                {
                    Id            = context.Message.Id,
                    UserId        = context.Message.UserId,
                    TimeStamp     = DateTimeOffset.UtcNow,
                    CorrelationId = context.Message.CorrelationId,
                    Message       = $"Blob with id {context.Message.BlobId} from bucket {context.Message.Bucket} can not be validated and standardized or not found. Error: {ex.Message}"
                });
            }
        }
Example #2
0
        public async Task Consume(ConsumeContext <Validate> context)
        {
            try
            {
                using (var blob = await blobStorage.GetFileAsync(context.Message.BlobId, context.Message.Bucket))
                {
                    StreamReader reader = new StreamReader(blob.GetContentAsStream());
                    string       mol    = reader.ReadToEnd();

                    var result = validation.Validate(mol);

                    await context.Publish <Validated>(new
                    {
                        Id     = context.Message.Id,
                        Record = new ValidatedRecord
                        {
                            Issues = IssuesResolver.ResolveIssues(result.Issues, issuesConfig)
                        },
                        UserId        = context.Message.UserId,
                        TimeStamp     = DateTimeOffset.UtcNow,
                        CorrelationId = context.Message.CorrelationId
                    });
                }
            }
            catch (Exception ex)
            {
                await context.Publish <ValidationFailed>(new
                {
                    Id            = context.Message.Id,
                    UserId        = context.Message.UserId,
                    TimeStamp     = DateTimeOffset.UtcNow,
                    CorrelationId = context.Message.CorrelationId,
                    Message       = $"Blob with id {context.Message.BlobId} from bucket {context.Message.Bucket} cannot be validated or not found. Error: {ex.Message}"
                });
            }
        }