public ValidateTFNResponse ValidateTFN([FromBody] Person person)
        {
            // Reponse is too fast, adding this here just so I can see the spinner (not for prod).
            Thread.Sleep(2000);

            if (string.IsNullOrEmpty(person?.TaxFileNumber) || !int.TryParse(person?.TaxFileNumber, out var tfnNumber))
            {
                _logger.Log(LogType.Error, $"Invalid TFN Entered: {person?.TaxFileNumber}");
                return(new ValidateTFNResponse()
                {
                    IsValid = false
                });
            }

            _logger.Log(LogType.Debug, $"Calling validator factory to create validator.");

            //Get All Patterns from the TFN entered.
            LinkedProcesser linkedProcesser = new LinkedProcesser(_logger);
            var             result          = linkedProcesser.GetAllUniquePatterns(person.TaxFileNumber);

            //Check if patterns exist in cache return false i.e no valid.
            CacheStorage cacheStorage      = new CacheStorage(_cache, _logger, _runOptions);
            object       cacheResult       = null;
            int          cacheResultsFound = 0;

            foreach (var item in result)
            {
                cacheResult = cacheStorage.GetCacheEntry(item);
                if (cacheResult != null)
                {
                    cacheResultsFound++;
                    _logger.Log(LogType.Debug, $"Pattern found in cache: {cacheResult}");
                    if (cacheResultsFound == (_runOptions.MaxRequiredCacheDetections != 0 ? _runOptions.MaxRequiredCacheDetections : 3))
                    {
                        _logger.Log(LogType.Error, $"{_runOptions.MaxRequiredCacheDetections} patterns found in cache, return error message.");

                        return(new ValidateTFNResponse()
                        {
                            IsValid = false,
                            ErrorMessage = "Validation tool doesn't allow multiple attempts for similar values "
                        });
                    }
                }
            }

            //Otherwise nothing is found add all unique patterns in the cache.
            foreach (var item in result)
            {
                cacheStorage.AddCacheEntry(item);
            }

            // Create a validator, assign the TFN to the validator and Process it.
            ValidatorFactory validatorFactory = new ValidatorFactory(_logger, _runOptions);
            var TFNValidator = validatorFactory.CreateValidator();

            TFNValidator.TaxFileNumber = person?.TaxFileNumber;

            return(new ValidateTFNResponse()
            {
                IsValid = TFNValidator.IsValid()
            });
        }