public IList <TemporaryExposureKey> FilterAndSaveKeys(IList <TemporaryExposureKeyGatewayDto> keys)
        {
            StringBuilder logErrorPerBatchSB = new StringBuilder();
            IList <TemporaryExposureKey> mappedKeys;

            IList <string> validationErrors = new List <string>();

            try
            {
                mappedKeys = _keyFilter.MapKeys(keys);
            }
            catch (Exception e)
            {
                _logger.LogError("|SmitteStop| StoreService: unable to parse and map response" + e);
                throw;
            }

            _logger.LogInformation($"Mapped  {mappedKeys?.Count} keys from {keys?.Count}");
            IList <TemporaryExposureKey> acceptedKeys = null;
            int acceptedKeysCount = 0;

            if (mappedKeys.Any())
            {
                foreach (var key in mappedKeys)
                {
                    CalulateDaysAndRisk(key);
                }
                _logger.LogInformation("Starting key validation.");
                acceptedKeys = _keyFilter.ValidateKeys(mappedKeys, out validationErrors);
                _logger.LogInformation($"Keys validated with {validationErrors?.Count} error.");
                if (validationErrors?.Count > 0)
                {
                    InformationLogValidationErrors(validationErrors);
                }
                _logger.LogInformation("Saving...");
                acceptedKeys = _addTemporaryExposureKeyService.FilterDuplicateKeysAsync(acceptedKeys).Result;
                _tempKeyRepository.AddTemporaryExposureKeysAsync(acceptedKeys).Wait();
                _logger.LogInformation($"{acceptedKeys?.Count} keys saved.");
                acceptedKeysCount = acceptedKeys.Count;
            }
            _logger.LogInformation($"Received {keys.Count} keys. Accepted and saved { acceptedKeysCount } of them.");

            foreach (string error in validationErrors)
            {
                logErrorPerBatchSB.Append(error + Environment.NewLine);
            }

            var errors = logErrorPerBatchSB.ToString();

            if (!string.IsNullOrEmpty(errors))
            {
                _logger.LogWarning($"Received {keys.Count} keys. Accepted and saved { acceptedKeysCount } of them. Validation Errors:{Environment.NewLine}{ errors }");
            }
            return(acceptedKeys ?? new List <TemporaryExposureKey>());
        }
Пример #2
0
        public void KeysAreValidatedProperly()
        {
            IList <string> errorMessageList = new List <string>();
            var            keyList          = _exposureKeyMock.MockListOfTemporaryExposureKeys();

            var numberOfInvalidKeys = 4;

            for (int i = 0; i < numberOfInvalidKeys; i++)
            {
                keyList.Add(_exposureKeyMock.MockInvalidKey());
            }

            var filteredList = _keyFilter.ValidateKeys(keyList, out errorMessageList);

            Assert.That(filteredList.Count == keyList.Count - numberOfInvalidKeys);
        }