using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using Kreta.Core; using Kreta.Core.Domain; using Kreta.Core.Enum; using Kreta.Core.Exceptions; namespace Kreta.Naplo.BusinessLogic.V3.Logic { internal class ValidatorLogic { private readonly List _errorList = new List(); private readonly bool _isValid = true; internal ValidatorLogic(object instance) { var context = new ValidationContext(instance, serviceProvider: null, items: null); _isValid = Validator.TryValidateObject(instance, context, _errorList, true); } public static implicit operator string(ValidatorLogic validator) => validator.GetFirstUserFriendlyError(); internal BlException ConvertToValidationException() { var exception = new BlException(BlExceptionType.ModelValidacio); var count = 1; foreach (var error in _errorList) { var name = error.MemberNames.FirstOrDefault() ?? "custom_" + count; exception.ErrorList.Add(new DetailedErrorItem(name, error.ErrorMessage, BlExceptionType.ModelValidacio)); count++; } return exception; } internal string GetFirstUserFriendlyError() => _errorList.Count > 0 ? _errorList[0].ErrorMessage : string.Empty; internal void ThrowExceptionIfModelIsNotvalid() { if (!_isValid) { throw ConvertToValidationException(); } } } }