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()
};
}