private async Task <DialogTurnResult> CotacaoListagemStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { string mensagem = string.Empty; var servico = new CotacaoMoeda(); try { var cotacoesSolicitadas = await servico.Listagem(); mensagem = cotacoesSolicitadas.Count > 1 ? "Cotações" : "Cotação"; mensagem += ":\n\n"; foreach (var cotacao in cotacoesSolicitadas) { mensagem += $"**{cotacao.name} ({cotacao.code})**: \n" + $"Valor de Compra R$ {cotacao.bid} \n" + $"Valor de Venda R$ {cotacao.ask} \n" + $"Variação R$ {cotacao.varBid} \n" + $"Porcentagem da Variação R$ {cotacao.pctChange} \n" + $"Máximo R$ {cotacao.high} \n" + $"Mínimo R$ {cotacao.low} \n"; } } catch (Exception ex) { mensagem = "Desculpe, não consegui buscar essa informação no momento. Se importa de tentar novamente?"; } return(await stepContext.NextAsync(mensagem, cancellationToken)); }
public object Post( [FromServices] IConfiguration config, CotacaoMoeda cotacao) { var conteudoCotacao = JsonSerializer.Serialize(cotacao); _logger.LogInformation($"Dados: {conteudoCotacao}"); var body = Encoding.UTF8.GetBytes(conteudoCotacao); string topic = config["AzureServiceBus:Topic"]; var client = new TopicClient( config["AzureServiceBus:ConnectionString"], topic); client.SendAsync(new Message(body)).Wait(); _logger.LogInformation( $"Azure Service Bus - Envio para o tópico {topic} concluído"); lock (_CONTADOR) { _CONTADOR.Incrementar(); } return(new { Resultado = "Mensagem enviada com sucesso!" }); }
public async Task MoedaCotacao(IDialogContext context, LuisResult result) { var message = string.Empty; var service = new CotacaoMoeda(); try { var moeda = result.Entities.FirstOrDefault(x => x.Type.Equals("Moeda")); message = "Cotações:\n\n"; var list = await service.Cotacao(moeda?.Entity ?? string.Empty); foreach (var cotacao in list) { var dataAtualizacao = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(cotacao.ultima_consulta), TimeZoneInfo.FindSystemTimeZoneById("E. South America Standard Time")); message += $"**{cotacao.nome}**: R$ {cotacao.valor.ToString("N4")}\n\n"; message += $"Data: {dataAtualizacao.ToString("dd/MM/yyyy HH:mm:ss")} | Fonte: {cotacao.fonte}\n\n"; } } catch (Exception ex) { message = "Desculpe, não consegui buscar essa informação no momento. Se importa de tentar novamente?"; } await context.PostAsync(message); context.Wait(MessageReceived); }
public static void Save(CotacaoMoeda cotacao) { var horario = DateTime.Now; var document = new CotacaoMoedaDocument(); document.HistLancamento = cotacao.Sigla + horario.ToString("yyyyMMdd-HHmmss"); document.Sigla = cotacao.Sigla; document.Valor = cotacao.Valor.Value; document.Data = horario.ToString("yyyy-MM-dd HH:mm:ss"); GetCollectionCotacoes().InsertOne(document); }
public async Task MoedaListagem(IDialogContext context, LuisResult result) { var service = new CotacaoMoeda(); var list = await service.Listagem(); await context.PostAsync("Moedas disponíveis para consulta:"); foreach (var item in list) { await context.PostAsync($"{item.nome} ({item.moeda})"); } context.Wait(MessageReceived); }
public async Task MoedaListagem(IDialogContext context, LuisResult result) { var message = string.Empty; var service = new CotacaoMoeda(); try { var list = await service.Listagem(); var cardActions = new List <CardAction>(); cardActions.Add(new CardAction() { Title = $"Todas as cotações", Type = ActionTypes.ImBack, Value = $"Cotações do dia" }); foreach (var item in list) { cardActions.Add(new CardAction() { Title = $"{item.nome} ({item.moeda})", Type = ActionTypes.ImBack, Value = $"Cotação {item.nome}" }); } var card = new HeroCard() { Title = "Moedas disponíveis", Subtitle = "Clique na moeda que deseja consultar", Buttons = cardActions }; var activity = context.MakeMessage(); activity.Id = new Random().Next().ToString(); activity.Attachments.Add(card.ToAttachment()); await context.PostAsync(activity); } catch (Exception ex) { message = "Desculpe, não consegui buscar essa informação no momento. Se importa de tentar novamente?"; await context.PostAsync(message); } context.Wait(MessageReceived); }
public void Save(CotacaoMoeda cotacao) { var horario = DateTime.Now; var document = new CotacaoMoedaDocument() { id = $"{cotacao.Codigo}-{horario.ToString("yyyyMMdd-HHmmss")}", Sigla = cotacao.Codigo, DataReferencia = horario.ToString("yyyy-MM-dd HH:mm:ss"), Valor = cotacao.Valor.Value }; using var client = GetDocumentClient(); client.CreateDocumentAsync( UriFactory.CreateDocumentCollectionUri( DB_COTACOES, COLLECTION_HISTORICO), document).Wait(); }
public async Task MoedaCotacao(IDialogContext context, LuisResult result) { var service = new CotacaoMoeda(); var moeda = result.Entities.FirstOrDefault(x => x.Type.Equals("Moeda")); await context.PostAsync("Cotações:"); var list = await service.Cotacao(moeda?.Entity ?? string.Empty); foreach (var cotacao in list) { var dataAtualizacao = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(cotacao.ultima_consulta).ToLocalTime(); await context.PostAsync($"{cotacao.nome}: R$ {cotacao.valor.ToString("N4")}"); await context.PostAsync($"Data: {dataAtualizacao} | Fonte: {cotacao.fonte}"); } context.Wait(MessageReceived); }
public void Run([ServiceBusTrigger("queue-cotacoes", Connection = "AzureServiceBus")] string myQueueItem, ILogger log) { log.LogInformation($"ProcessarCotacao - Dados: {myQueueItem}"); CotacaoMoeda cotacao = null; try { cotacao = JsonSerializer.Deserialize <CotacaoMoeda>(myQueueItem, new JsonSerializerOptions() { PropertyNameCaseInsensitive = true }); } catch { log.LogInformation($"ProcessarCotacao - Erro durante a deserialização"); } if (cotacao == null) { return; } var validationResult = new CotacaoMoedaValidator().Validate(cotacao); if (validationResult.IsValid) { log.LogInformation($"ProcessarCotacao - Dados pós formatação: {JsonSerializer.Serialize(cotacao)}"); _repository.Save(cotacao); log.LogInformation("ProcessarCotacao - Cotação registrada com sucesso!"); } else { log.LogError("ProcessarCotacao - Dados invalidos para a Cotação"); foreach (var error in validationResult.Errors) { log.LogError($"ProcessarCotacao - {error.ErrorMessage}"); } } }
public static void Save(CotacaoMoeda cotacao) { var client = new MongoClient( Environment.GetEnvironmentVariable("MongoConnection")); IMongoDatabase db = client.GetDatabase( Environment.GetEnvironmentVariable("MongoDatabase")); var historico = db.GetCollection <CotacaoMoedaDocument>( Environment.GetEnvironmentVariable("MongoCollection")); var horario = DateTime.Now; var document = new CotacaoMoedaDocument(); document.HistLancamento = cotacao.Sigla + horario.ToString("yyyyMMdd-HHmmss"); document.Sigla = cotacao.Sigla; document.Valor = cotacao.Valor.Value; document.Data = horario.ToString("yyyy-MM-dd HH:mm:ss"); historico.InsertOne(document); }
private async Task <DialogTurnResult> CotacaoStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { var LUISResponse = (LUISResponse)stepContext.Options; if (string.IsNullOrWhiteSpace(LUISResponse.Entidade)) { return(await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = MessageFactory.Text("Ops, não entendi qual moeda você deseja cotar, poderia repetir?") }, cancellationToken)); } string mensagem = string.Empty; var servico = new CotacaoMoeda(); try { var cotacoesSolicitadas = await servico.Cotacao(LUISResponse.Entidade); mensagem = cotacoesSolicitadas.Count > 1 ? "Cotações" : "Cotação"; mensagem += ":\n\n"; foreach (var cotacao in cotacoesSolicitadas) { //var dataAtualizacao = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(Double.Parse(cotacao.timestamp)), TimeZoneInfo.FindSystemTimeZoneById("E. South America Standard Time")); mensagem += $"**{cotacao.name} ({cotacao.code})**: \n" + $"Valor de Compra R$ {cotacao.bid} \n" + $"Valor de Venda R$ {cotacao.ask} \n" + $"Variação R$ {cotacao.varBid} \n" + $"Porcentagem da Variação R$ {cotacao.pctChange} \n" + $"Máximo R$ {cotacao.high} \n" + $"Mínimo R$ {cotacao.low} \n"; //mensagem += $"Data: {dataAtualizacao.ToString("dd/MM/yyyy HH:mm:ss")}\n\n"; } } catch (Exception ex) { mensagem = "Desculpe, não consegui buscar essa informação no momento. Se importa de tentar novamente?"; } return(await stepContext.NextAsync(mensagem, cancellationToken)); }
public static void Run( [RabbitMQTrigger("queue-cotacoes", ConnectionStringSetting = "BrokerRabbitMQ")] string inputMessage, ILogger log) { CotacaoMoeda cotacao = null; try { cotacao = JsonSerializer.Deserialize <CotacaoMoeda>(inputMessage, new JsonSerializerOptions() { PropertyNameCaseInsensitive = true }); } catch { log.LogError("MoedasRabbitMQTrigger - Erro durante a deserialização!"); } if (cotacao != null) { var validationResult = new CotacaoMoedaValidator().Validate(cotacao); if (validationResult.IsValid) { log.LogInformation($"MoedasRabbitMQTrigger - Dados pós formatação: {JsonSerializer.Serialize(cotacao)}"); CotacoesMoedasRepository.Save(cotacao); log.LogInformation("MoedasRabbitMQTrigger - Cotação registrada com sucesso!"); } else { log.LogError("MoedasRabbitMQTrigger - Dados inválidos para a Cotação"); foreach (var error in validationResult.Errors) { log.LogError($"MoedasRabbitMQTrigger - {error.ErrorMessage}"); } } } }
public async Task <CotacaoMoeda> GetCotacao(DateTime?date = null) { date ??= DateTime.Today; using var request = new HttpRequestMessage(HttpMethod.Get, GetUrl(date.Value)); var client = _clientFactory.CreateClient(); var response = await client.SendAsync(request); var cotacaoMoeda = new CotacaoMoeda(); if (response.IsSuccessStatusCode) { using var responseStream = await response.Content.ReadAsStreamAsync(); var result = await JsonSerializer.DeserializeAsync <ResultBC>(responseStream); if (!result.Value.Any()) { return(await GetCotacao(date.Value.AddDays(-1))); } cotacaoMoeda.DataFechamentoCotacao = date.Value; cotacaoMoeda.Cotacao = (long)(result.Value.FirstOrDefault().CotacaoCompra * 10000); } return(cotacaoMoeda); }
public async Task <Resultado> Post( [FromServices] IConfiguration configuration, CotacaoMoeda cotacao) { var conteudoCotacao = JsonSerializer.Serialize(cotacao); _logger.LogInformation($"Dados: {conteudoCotacao}"); var body = Encoding.UTF8.GetBytes(conteudoCotacao); string queue = configuration["Queue-AzureServiceBus"]; var client = new QueueClient( configuration.GetConnectionString("AzureServiceBus"), queue); await client.SendAsync(new Message(body)); _logger.LogInformation( $"Azure Service Bus - Envio para a queue {queue} concluído"); return(new Resultado() { Mensagem = "Informações de cotação de moeda enviadas com sucesso!" }); }