public SaveBudgetItemTypeValidator(IBudgetItemTypeRepository repository)
        {
            RuleFor(e => e.Name).NotEmpty().WithErrorMessage(Errors.NameRequired());
            RuleFor(e => e.Name).CustomAsync(MustBeUniqueAsync);

            _repository = repository;
        }
        protected async Task <bool> MustBeUniqueAsync(
            string name,
            CustomContext context,
            CancellationToken cancellationToken)
        {
            var duplicateByName = await _repository.FindDuplicateByNameAsync((BudgetItemType)context.InstanceToValidate);

            if (duplicateByName is null)
            {
                return(true);
            }

            var error = Errors.NameExists(name);

            var failure = new ValidationFailure(nameof(BudgetItemType.Name), error.Message);

            failure.ErrorCode = error.Code;

            context.AddFailure(failure);

            return(false);
        }