using BpsRwApp.Models; namespace BpsRwApp.Services; /// /// Interface untuk common validation logic /// public interface IValidationService { /// /// Validates statistics model /// /// Statistics to validate /// Validation result ValidationResult ValidateStatistics(StatisticsModel statistics); /// /// Validates feature model /// /// Feature to validate /// Validation result ValidationResult ValidateFeature(FeatureModel feature); /// /// Validates date range /// /// Start date /// End date /// Validation result ValidationResult ValidateDateRange(DateTime startDate, DateTime endDate); /// /// Validates required string fields /// /// String value to validate /// Name of the field /// Maximum length allowed /// Validation result ValidationResult ValidateRequiredString(string? value, string fieldName, int maxLength = int.MaxValue); /// /// Validates numeric range /// /// Numeric value to validate /// Name of the field /// Minimum allowed value /// Maximum allowed value /// Validation result ValidationResult ValidateNumericRange(decimal value, string fieldName, decimal minValue = 0, decimal maxValue = decimal.MaxValue); } /// /// Result of validation operation /// public class ValidationResult { public bool IsValid { get; set; } public List Errors { get; set; } = new(); public static ValidationResult Success() => new() { IsValid = true }; public static ValidationResult Failure(string error) => new() { IsValid = false, Errors = new List { error } }; public static ValidationResult Failure(IEnumerable errors) => new() { IsValid = false, Errors = errors.ToList() }; }