AyCode.Core/AyCode.Services/Nav/Ekaer/EkaerValidationMessage.cs

38 lines
1.9 KiB
C#

using System.ComponentModel.DataAnnotations;
namespace AyCode.Services.Nav.Ekaer;
/// <summary>Az EKÁER validációs üzenet súlyossága.</summary>
public enum EkaerSeverity
{
/// <summary>Nem blokkoló — a bejelentés beküldhető, de valamit pótolni kell (pl. a rendszám a felrakodásig).</summary>
Warning,
/// <summary>Blokkoló — a NAV elutasítaná; beküldés előtt javítandó.</summary>
Error,
}
/// <summary>
/// Súlyossággal (warning/error) bővített validációs eredmény. A <see cref="ValidationResult"/>-ból származik,
/// így a meglévő fogyasztók (akik csak az <c>ErrorMessage</c>-et használják) változatlanul működnek; aki a
/// szintet is akarja, a <see cref="Severity"/>-t / a <c>GetSeverity()</c> kiterjesztést használja.
/// </summary>
public sealed class EkaerValidationMessage(EkaerSeverity severity, string message) : ValidationResult(message)
{
public EkaerSeverity Severity { get; } = severity;
}
/// <summary>Súlyosság-segédek a validációs eredmény-listához.</summary>
public static class EkaerValidationExtensions
{
/// <summary>A súlyosság; egy sima (nem <see cref="EkaerValidationMessage"/>) eredmény konzervatívan <see cref="EkaerSeverity.Error"/>.</summary>
public static EkaerSeverity GetSeverity(this ValidationResult result)
=> result is EkaerValidationMessage m ? m.Severity : EkaerSeverity.Error;
/// <summary>Van-e blokkoló (error) szintű üzenet — ennek alapján NEM küldhető a bejelentés.</summary>
public static bool HasErrors(this IEnumerable<ValidationResult> results) => results.Any(r => r.GetSeverity() == EkaerSeverity.Error);
/// <summary>Van-e warning szintű üzenet (a beküldést nem blokkolja, de pótlandó).</summary>
public static bool HasWarnings(this IEnumerable<ValidationResult> results) => results.Any(r => r.GetSeverity() == EkaerSeverity.Warning);
}