using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using Kreta.Core; using Kreta.Resources; using KretaValidate = Kreta.Core.Validation.Exceptions; using KretaValidateEnum = Kreta.Core.Validation.Exceptions.Enum; namespace Kreta.BusinessLogic.Validation { /// /// Validates the models with "DataAnnotationAttributes" and gives You the option /// to create custom validation if model implements the "IValidatableObject" interface. /// public class BlValidator { public static implicit operator string(BlValidator blValidator) => blValidator.GetFirstUserFriendlyError(); public readonly List ErrorList = new List(); public readonly bool IsValid; //TODO devkornel: Megcsinálni List-re is vagy Singleton-ra!!!! public BlValidator(object coInstance) { var context = new ValidationContext(coInstance, serviceProvider: null, items: null); IsValid = Validator.TryValidateObject(coInstance, context, ErrorList, true); } public string GetUserFriendlyError() => string.Join(Constants.General.LineSeparator, ErrorList.Select(x => x.ErrorMessage).ToArray()); public string GetFirstUserFriendlyError() => ErrorList.Count > 0 ? ErrorList[0].ErrorMessage : string.Empty; public KretaValidate.ValidationException ConvertToValidationException() { var validationException = new KretaValidate.ValidationException(KretaValidateEnum.ValidationErrorType.Undefined, ErrorResource.ValidaciosHiba); var count = 1; foreach (var error in ErrorList) { var name = error.MemberNames.FirstOrDefault() ?? "custom_" + count; validationException.AddValidationItem(new KretaValidate.ValidationExceptionItem(name, error.ErrorMessage)); count++; } return validationException; } } }