public async Task <Cotacao> ConsultarCotacao(ConsultaCotacaoArgs args, CancellationToken cancellationToken) { try { string URL = MontarURLDeConsultaPorTickerEProduto(args); HttpResponseMessage response = await _client.GetAsync(URL, cancellationToken); string result = string.Empty; result = await response.Content.ReadAsStringAsync(); #warning IMPLEMENTAR REGRA PARA CACHE E RESILIENCIA try { Meta meta = JsonConvert.DeserializeObject <CotacaoRoot>(result).Chart.Result[0].Meta; if (response.IsSuccessStatusCode && meta != null) { return(new Cotacao(meta.ChartPreviousClose, meta.RegularMarketPrice)); } } catch (Exception) { return(new Cotacao()); } return(new Cotacao()); } catch (HttpRequestException) { throw; } catch (Exception) { throw; } }
public async Task <ActionResult> ConsultarCotacao([FromQuery] ConsultaCotacaoArgs args) { Cotacao cotacao = await _queries.ObterCotacaoPorTicker(args); if (cotacao.Preco == 0) { NotifyError($"O Ativo com Ticker '{args.Ticker}' referente ao Produto '{args.ProdutoDescricao}' não foi localizado"); } return(ResponseBase(cotacao)); }
public string MontarURLDeConsultaPorTickerEProduto(ConsultaCotacaoArgs args) { string symbol; switch (args.ProdutoDescricao.ToUpper()) { case "FII": case "AÇÃO": symbol = $"{args.Ticker}.SA"; break; default: symbol = args.Ticker; break; } return($"https://query1.finance.yahoo.com/v8/finance/chart/{symbol}?interval=1d"); }
public async Task <Cotacao> ObterCotacaoPorTicker(ConsultaCotacaoArgs args) { Cotacao cotacao = await _service.ConsultarCotacao(args, CancellationToken.None); return(cotacao); }