50 lines
1.6 KiB
C#
50 lines
1.6 KiB
C#
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<ValidationResult> _errorList = new List<ValidationResult>();
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|