48 lines
2 KiB
C#
48 lines
2 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Validates the models with "DataAnnotationAttributes" and gives You the option
|
|
/// to create custom validation if model implements the "IValidatableObject" interface.
|
|
/// </summary>
|
|
public class BlValidator
|
|
{
|
|
public static implicit operator string(BlValidator blValidator)
|
|
=> blValidator.GetFirstUserFriendlyError();
|
|
|
|
public readonly List<ValidationResult> ErrorList = new List<ValidationResult>();
|
|
public readonly bool IsValid;
|
|
|
|
//TODO devkornel: Megcsinálni List<object>-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;
|
|
}
|
|
}
|
|
}
|