public async Task <IActionResult> Post( [FromServices] BackendTestContext context, [FromBody] ProdutoDto model) { try { DateTime now = DateTime.Now; Produto produto = new Produto() { Nome = model.Nome, QtdeEstoque = model.QtdeEstoque, ValorUnitario = model.ValorUnitario, DataCriacao = now, DataAtualizacao = now }; context.Produtos.Add(produto); await context.SaveChangesAsync(); return(Ok("Produto cadastrado")); } catch { return(BadRequest("Ocorreu um erro desconhecido")); } }
public async Task <ActionResult <ProdutoDetalhadoDto> > GetById([FromServices] BackendTestContext context, int id) { try { ProdutoDetalhadoDto produtoDetalhado = await(from produto in context.Produtos join transacao in context.Transacoes on produto.Id equals transacao.ProdutoId into aux from entry in aux.DefaultIfEmpty() where produto.Id == id orderby entry.DataVenda descending select new ProdutoDetalhadoDto() { Id = produto.Id, Nome = produto.Nome, QtdeEstoque = produto.QtdeEstoque, ValorUnitario = produto.ValorUnitario, ValorVenda = entry.ValorVenda, DataVenda = entry.DataVenda }).FirstOrDefaultAsync(); if (produtoDetalhado == null) { return(BadRequest("Ocorreu um erro desconhecido")); } return(Ok(produtoDetalhado)); } catch { return(BadRequest("Ocorreu um erro desconhecido")); } }
public IActionResult Post( [FromServices] BackendTestContext context, [FromBody] PagamentoDto model) { try { int mes, ano; string estado; Regex regex = new Regex(@"(?<Mes>\d{2})/(?<Ano>\d{4})"); Match match = regex.Match(model.Cartao.Data_Expiracao); mes = Int32.Parse(match.Groups["Mes"].Value); ano = Int32.Parse(match.Groups["Ano"].Value); DateTime now = DateTime.Now; // Checando o valor e a data de vencimento do cartão if (model.Valor > 100 && (ano > now.Year || (ano == now.Year && mes >= now.Month))) { estado = "APROVADO"; } else { estado = "REJEITADO"; } var resposta = new { Valor = model.Valor, Estado = estado }; return(Ok(resposta)); } catch { return(BadRequest("Ocorreu um erro desconhecido")); } }
public async Task <IActionResult> Delete([FromServices] BackendTestContext context, int id) { var produtoToDelete = await context.Produtos.AsNoTracking().FirstOrDefaultAsync(a => a.Id == id); try { context.Produtos.Remove(produtoToDelete); await context.SaveChangesAsync(); return(Ok("Produto excluído com sucesso")); } catch { return(BadRequest("Ocorreu um erro desconhecido")); } }
public async Task <ActionResult <List <ProdutoDto> > > Get([FromServices] BackendTestContext context) { try { var produtos = await context.Produtos.Select(p => new ProdutoDto() { Id = p.Id, Nome = p.Nome, QtdeEstoque = p.QtdeEstoque, ValorUnitario = p.ValorUnitario }) .ToListAsync(); return(Ok(produtos)); } catch { return(BadRequest("Ocorreu um erro desconhecido")); } }
public async Task <IActionResult> Post( [FromServices] BackendTestContext context, [FromBody] CompraDto model) { try { HttpClientHandler clientHandler = new HttpClientHandler(); clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return(true); }; // O gateway fornecido (http://sv-dev-01.pareazul.com.br:8080/api/gateways/compras) não conseguiu ser acessado // e por tanto decidi por usar a api de pagamentos implementada no item 6 como gateway Uri link = new Uri("http://127.0.0.1:5000/api/pagamento/compras"); var client = new HttpClient(clientHandler); Produto produto = await context.Produtos.AsNoTracking().FirstOrDefaultAsync(p => p.Id == model.Produto_Id); if (produto == null || produto.QtdeEstoque < model.Qtde_Comprada) { return(BadRequest("Ocorreu um erro desconhecido")); } PagamentoDto pagamento = new PagamentoDto() { Valor = produto.ValorUnitario * model.Qtde_Comprada, Cartao = model.Cartao }; var jsonInString = JsonConvert.SerializeObject(pagamento); var httpResponse = await client.PostAsync(link, new StringContent(jsonInString, Encoding.UTF8, "application/json")); httpResponse.EnsureSuccessStatusCode(); string respostaEmString = await httpResponse.Content.ReadAsStringAsync(); dynamic gatewayJson = JsonConvert.DeserializeObject(respostaEmString); DateTime now = DateTime.Now; // Atualizando a quantidade de estoque do produto e a data de atualização produto.QtdeEstoque = produto.QtdeEstoque - model.Qtde_Comprada; produto.DataAtualizacao = now; context.Entry(produto).State = EntityState.Modified; // Cadastrando a transação Transacao transacao = new Transacao() { ProdutoId = model.Produto_Id, ValorVenda = gatewayJson.valor, DataVenda = now, Estado = gatewayJson.estado }; context.Transacoes.Add(transacao); await context.SaveChangesAsync(); return(Ok("Venda realizada com sucesso")); } catch { return(BadRequest("Ocorreu um erro desconhecido")); } }