/// <summary> /// Create custom validator. /// </summary> /// <param name="builder">Extension type.</param> /// <returns>Record validator.</returns> public static IRecordValidator CreateCustom(this ValidatorBuilder builder) { if (builder is null) { throw new ArgumentNullException(nameof(builder)); } IConfiguration config = new ConfigurationBuilder().AddJsonFile("validation-rules.json").Build(); char minChar = char.Parse(config["custom:access:min"]); char maxChar = char.Parse(config["custom:access:max"]); int minLengthFirstName = int.Parse(config["custom:firstName:min"], CultureInfo.InvariantCulture); int maxLengthFirstName = int.Parse(config["custom:firstName:max"], CultureInfo.InvariantCulture); int minLengthLastName = int.Parse(config["custom:lastName:min"], CultureInfo.InvariantCulture); int maxLengthLastName = int.Parse(config["custom:lastName:max"], CultureInfo.InvariantCulture); decimal maxSalary = decimal.Parse(config["custom:salary:max"], CultureInfo.InvariantCulture); decimal minSalary = decimal.Parse(config["custom:salary:min"], CultureInfo.InvariantCulture); DateTime minDate = DateTime.Parse(config["custom:dateOfBirth:from"], CultureInfo.InvariantCulture); DateTime maxDate = DateTime.Parse(config["custom:dateOfBirth:to"], CultureInfo.InvariantCulture); return(builder.ValidateFirstName(minLengthFirstName, maxLengthFirstName) .ValidateLastName(minLengthLastName, maxLengthLastName) .ValidateDateOfBirth(minDate, maxDate) .ValidateAccess(minChar, maxChar) .ValidateSalary(minSalary, maxSalary) .Create()); }
private static (IRecordValidator, ValidatorParameters) CreateValidator(ValidatorBuilder validatorBuilder, string name, string validationRulesFile) { if (validatorBuilder is null) { throw new ArgumentNullException(nameof(validatorBuilder), $"{nameof(validatorBuilder)} is null"); } var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile(validationRulesFile); var config = builder.Build(); var validationRules = config.GetSection(name).Get <ValidatorParameters>(); IRecordValidator recordValidator = validatorBuilder .ValidateFirstName(validationRules.FirstName.Min, validationRules.FirstName.Max) .ValidateLastName(validationRules.LastName.Min, validationRules.LastName.Max) .ValidateGender() .ValidateDateOfBirth(validationRules.DateOfBirth.From, validationRules.DateOfBirth.To) .ValidateCreditSum(validationRules.CreditSum.Min, validationRules.CreditSum.Max) .ValidateDuration(validationRules.Duration.From, validationRules.Duration.To) .Create(); return(recordValidator, validationRules); }
/// <summary> /// Creates composite validator based on configuration. /// </summary> /// <param name="validatorBuilder">Builder to create composite validator.</param> /// <param name="configuration">Configuration to create validator.</param> /// <returns>Composite validator.</returns> /// <exception cref="ArgumentNullException">Thrown when validator builder or configuration is null.</exception> public static CompositeValidator CreateValidator(this ValidatorBuilder validatorBuilder, IConfiguration configuration) { if (validatorBuilder is null) { throw new ArgumentNullException(nameof(validatorBuilder), Configurator.GetConstantString("NullValidatorBuilder")); } if (configuration is null) { throw new ArgumentNullException(nameof(configuration), Configurator.GetConstantString("NullConfiguration")); } try { var firstName = configuration.GetSection("firstName"); var lastName = configuration.GetSection("lastName"); var date = configuration.GetSection("dateOfBirth"); var patronymicLetter = configuration.GetSection("patronymicLetter"); var income = configuration.GetSection("income"); var height = configuration.GetSection("height"); var result = validatorBuilder.ValidateFirstName(Convert.ToInt32(firstName.GetSection("minLength").Value, CultureInfo.InvariantCulture), Convert.ToInt32(firstName.GetSection("maxLength").Value, CultureInfo.InvariantCulture)) .ValidateLastName(Convert.ToInt32(lastName.GetSection("minLength").Value, CultureInfo.InvariantCulture), Convert.ToInt32(lastName.GetSection("maxLength").Value, CultureInfo.InvariantCulture)) .ValidateDateOfBirth(DateTime.ParseExact(date.GetSection("from").Value, Configurator.GetConstantString("DateFormatDM"), CultureInfo.InvariantCulture), DateTime.ParseExact(date.GetSection("to").Value, Configurator.GetConstantString("DateFormatDM"), CultureInfo.InvariantCulture)) .ValidatePatronymic(Convert.ToChar(patronymicLetter.GetSection("from").Value, CultureInfo.InvariantCulture), Convert.ToChar(patronymicLetter.GetSection("to").Value, CultureInfo.InvariantCulture)) .ValidateIncome(Convert.ToDecimal(income.GetSection("from").Value, CultureInfo.InvariantCulture), Convert.ToDecimal(income.GetSection("to").Value, CultureInfo.InvariantCulture)) .ValidateHeight(Convert.ToInt16(height.GetSection("min").Value, CultureInfo.InvariantCulture), Convert.ToInt16(height.GetSection("max").Value, CultureInfo.InvariantCulture)) .Create(); return(result); } catch (ArgumentNullException) { Console.WriteLine(Configurator.GetConstantString("InvalidValidationFile")); Console.WriteLine(Configurator.GetConstantString("ClosingProgram")); Environment.Exit(-1); } catch (FormatException) { Console.WriteLine(Configurator.GetConstantString("InvalidValidationFile")); Console.WriteLine(Configurator.GetConstantString("ClosingProgram")); Environment.Exit(-1); } catch (OverflowException) { Console.WriteLine(Configurator.GetConstantString("ValidationOutOfRange")); Console.WriteLine(Configurator.GetConstantString("ClosingProgram")); Environment.Exit(-1); } return(null); }
/// <summary> /// Create Record Validator. /// </summary> /// <param name="builder">The VaildatorBuilder.</param> /// <param name="validationRule">The validation rule.</param> /// <returns>The record validator.</returns> public static IRecordValidator Create(this ValidatorBuilder builder, string validationRule = "default") { if (builder is null) { throw new ArgumentNullException($"{nameof(builder)} canot be null."); } var setters = new ConfigurationSetter(validationRule); var validateParameters = setters.GetParameters(); return(builder. ValidateFirstName(validateParameters.FirstNameMinLength, validateParameters.FirstNameMaxLenght). ValidateLastName(validateParameters.LastNameMinLength, validateParameters.LastNameMaxLength). ValidateDateOfBirth(validateParameters.DateOfBirthFrom, validateParameters.DateOfBirthTo). ValidateExperience(validateParameters.ExperienceMinValue, validateParameters.ExperienceMaxValue). ValidateAccount(validateParameters.AccountMinValue). ValidateGender(validateParameters.Gender). Create()); }