コード例 #1
0
        public async Task <IEnumerable <BulkRegisterOdsInstancesResult> > Execute(IEnumerable <IRegisterOdsInstanceModel> odsInstances, IEnumerable <IRegisterOdsInstanceModel> filteredDataRecords, ApiMode mode, string userId, CloudOdsClaimSet cloudOdsClaimSet = null)
        {
            var results = new List <BulkRegisterOdsInstancesResult>();

            var dataRecords      = odsInstances.ToList();
            var recordsToProcess = filteredDataRecords.ToList();

            if (!recordsToProcess.Any())
            {
                recordsToProcess = _dataFiltrationService.FilteredRecords(dataRecords, mode).ToList();
            }

            var skippedRecords = dataRecords.Except(recordsToProcess);

            foreach (var skippedInstance in skippedRecords)
            {
                results.Add(new BulkRegisterOdsInstancesResult
                {
                    NumericSuffix            = skippedInstance.NumericSuffix.ToString(),
                    Description              = skippedInstance.Description,
                    IndividualInstanceResult = IndividualInstanceResult.Skipped
                });
                _logger.Info($"Ods instance({skippedInstance.NumericSuffix.ToString()}) was skipped because it was previously registered.");
            }

            foreach (var instance in recordsToProcess)
            {
                try
                {
                    var odsInstanceRegisteredId = await _registerOdsInstanceCommand.Execute(instance, mode, userId, cloudOdsClaimSet);

                    results.Add(new BulkRegisterOdsInstancesResult
                    {
                        NumericSuffix            = instance.NumericSuffix.ToString(),
                        Description              = instance.Description,
                        IndividualInstanceResult = IndividualInstanceResult.Succeded,
                        OdsInstanceRegisteredId  = odsInstanceRegisteredId
                    });
                    _logger.Info($"Ods instance({instance.NumericSuffix.ToString()}) registered successfully.");
                }
                catch (Exception ex)
                {
                    results.Add(new BulkRegisterOdsInstancesResult
                    {
                        NumericSuffix            = instance.NumericSuffix.ToString(),
                        Description              = instance.Description,
                        IndividualInstanceResult = IndividualInstanceResult.Failed,
                        ErrorMessage             = ex.Message
                    });
                    _logger.Error($"Ods instance({instance.NumericSuffix.ToString()}) registration failed. Error: {ex.Message}");
                }
            }

            return(results);
        }
コード例 #2
0
        public BulkRegisterOdsInstancesModelValidator(AdminAppDbContext database
                                                      , ICloudOdsAdminAppSettingsApiModeProvider apiModeProvider
                                                      , IDatabaseValidationService databaseValidationService
                                                      , IDatabaseConnectionProvider databaseConnectionProvider
                                                      , IBulkRegisterOdsInstancesFiltrationService dataFilterService)
        {
            var mode = apiModeProvider.GetApiMode();

            RuleFor(m => m.OdsInstancesFile)
            .NotEmpty();

            RuleFor(m => m.OdsInstancesFile.FileName).NotNull().Must(x => x.ToLower().EndsWith(".csv"))
            .WithMessage("Please select a file with .csv format.");

            When(m => m.OdsInstancesFile != null, () =>
            {
                RuleFor(m => m).SafeCustom(HaveValidHeaders);
            });

            When(m => m.OdsInstancesFile != null && !ValidHeadersRuleFailed, () =>
            {
                RuleFor(m => m).SafeCustom(HaveUniqueRecords);
            });

            When(
                m => m.OdsInstancesFile != null && !UniquenessRuleFailed && !ValidHeadersRuleFailed, () =>
            {
                RuleFor(x => x)
                .SafeCustom(
                    (model, context) =>
                {
                    var validator = new RegisterOdsInstanceModelValidator(
                        database, apiModeProvider, databaseValidationService,
                        databaseConnectionProvider, true);

                    var newOdsInstancesToRegister = dataFilterService.FilteredRecords(model.DataRecords(), mode).ToList();
                    model.FilteredDataRecords     = newOdsInstancesToRegister;

                    foreach (var record in newOdsInstancesToRegister)
                    {
                        var data    = (RegisterOdsInstanceModel)record;
                        var results = validator.Validate(data);
                        if (!results.IsValid)
                        {
                            foreach (var failure in results.Errors)
                            {
                                _logger.Error($"Property: {failure.PropertyName} failed validation. Error: {failure.ErrorMessage}");
                            }
                        }
                        context.AddFailures(results);
                    }
                });
            });
        }