示例#1
0
        public async Task <QrResponseModel> ScanQrAsync(string qrPath)
        {
            _logger.LogTrace($"{TAG} ScanQrAsync called with path: {qrPath}");
            if (string.IsNullOrWhiteSpace(qrPath))
            {
                throw new ArgumentException("The path cannot be null or empty.");
            }

            var cacheKey       = new QrCacheKey(qrPath);
            var cachedResponse = await _cacheStore.GetAsync <QrResponseModel>(cacheKey);

            if (cachedResponse != null)
            {
                _logger.LogTrace($"{TAG} Returning response found in cache.");
                return(cachedResponse);
            }

            QrFileModel file = null;

            try
            {
                file = await _provider.ProvideQrAsync(qrPath);
            }
            catch (Exception e)
            {
                _logger.LogError($"{TAG} Provider call failed. Reason: '{e.Message}'.");
                throw;
            }

            QrResponseModel result = null;

            try
            {
                result = await _client.PostQrAsync(file);
            }
            catch (Exception e)
            {
                _logger.LogError($"{TAG} QR api call failed. Reason: '{e.Message}'.");
                throw;
            }

            await _cacheStore.AddAsync(cacheKey, result);

            return(result);
        }
示例#2
0
        public async Task <QrResponseModel> PostQrAsync(QrFileModel file)
        {
            _logger.LogTrace($"{TAG} PostQrAsync called with file: {file.Name}");
            var byteContent = new ByteArrayContent(file.Content);
            var content     = new MultipartFormDataContent {
                { byteContent, "file", file.Name }
            };

            _logger.LogTrace($"{TAG} Calling api at address: '{API_URL}/read-qr-code/'");
            var response = await _client.PostAsync($"{API_URL}/read-qr-code/", content);

            _logger.LogDebug($"{TAG} Received response status code: {response.StatusCode}, reason phrase: {response.ReasonPhrase}");
            response.EnsureSuccessStatusCode();

            var json = await response.Content.ReadAsStringAsync();

            var goQrResponse = JsonSerializer.Deserialize <GoQrResponse[]>(json);

            return(ParseGoQrResponse(goQrResponse));
        }