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); }
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)); }