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"));
            }
        }
Exemple #3
0
        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"));
            }
        }
Exemple #6
0
        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"));
            }
        }