47 lines
2.1 KiB
C#

using System.Collections.Generic;
using Compliance.Infrastructure.Repositories;
using Compliance.Services.ValidationRules;
namespace Compliance.Services.ValidationRules
{
public interface IValidationRuleFactory
{
IEnumerable<IValidationRule> CreateRules();
}
public class ValidationRuleFactory(IDistributorRepository distributorRepository) : IValidationRuleFactory
{
private readonly IDistributorRepository _distributorRepository = distributorRepository;
private IEnumerable<IValidationRule>? _cachedRules;
private static class RuleTypes
{
public const string Tariff = nameof(TariffValidationRule);
public const string Tax = nameof(TaxValidationRule);
public const string TariffComponent = nameof(TariffComponentValidationRule);
public const string FlagTariff = nameof(FlagTariffValidationRule);
public const string PublicLighting = nameof(PublicLightingValidationRule);
public const string ICMS = nameof(ICMSValidationRule);
}
public IEnumerable<IValidationRule> CreateRules()
{
return _cachedRules ??= CreateRulesInternal().OrderBy(r => r.Priority);
}
private Dictionary<string, IValidationRule>.ValueCollection CreateRulesInternal()
{
var rules = new Dictionary<string, IValidationRule>
{
[nameof(BasicInformationValidationRule)] = new BasicInformationValidationRule(),
[nameof(ConsumptionValidationRule)] = new ConsumptionValidationRule(),
[RuleTypes.TariffComponent] = new TariffComponentValidationRule(_distributorRepository),
[RuleTypes.FlagTariff] = new FlagTariffValidationRule(_distributorRepository),
[RuleTypes.PublicLighting] = new PublicLightingValidationRule(_distributorRepository),
[RuleTypes.ICMS] = new ICMSValidationRule(_distributorRepository),
[RuleTypes.Tax] = new TaxValidationRule(_distributorRepository)
};
return rules.Values;
}
}
}