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); } }); }); }
public BulkRegisterOdsInstancesModelValidator(AdminAppDbContext database , ICloudOdsAdminAppSettingsApiModeProvider apiModeProvider , IDatabaseValidationService databaseValidationService , IDatabaseConnectionProvider databaseConnectionProvider) { RuleFor(m => m.OdsInstancesFile) .NotEmpty(); RuleFor(m => m.OdsInstancesFile) .Must(HaveUniqueRecords) .When(m => m.OdsInstancesFile != null); When( m => m.OdsInstancesFile != null && !UniquenessRuleFailed, () => { RuleFor(x => x.OdsInstancesFile) .SafeCustom( (model, context) => { var validator = new RegisterOdsInstanceModelValidator( database, apiModeProvider, databaseValidationService, databaseConnectionProvider, true); foreach (var record in model.DataRecords()) { var results = validator.Validate(record); if (!results.IsValid) { foreach (var failure in results.Errors) { _logger.Error($"Property: {failure.PropertyName} failed validation. Error: {failure.ErrorMessage}"); } } context.AddFailures(results); } }); }); }