47 lines
2.1 KiB
C#
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;
|
|
}
|
|
}
|
|
} |