Exemple #1
0
        public async Task <IActionResult> Post([FromBody] VendaSignature signature)
        {
            var transaction = Agent.Tracer.StartTransaction("Realizando uma venda", "Requisição");

            try
            {
                await _vendaService.InserirAsync(signature);

                return(Created("", ""));
            }
            catch (Exception ex)
            {
                transaction.CaptureException(ex);
                _logger.LogError(ex.ToString());
                return(BadRequest($"Erro => {ex.Message}"));
            }
            finally
            {
                transaction.End();
            }
        }
Exemple #2
0
        public async Task InserirAsync(VendaSignature signature)
        {
            var produtos = new List <Produto>();
            var total    = 0.00M;

            if (!signature.ProdutosId.Any())
            {
                throw new Exception("Para a venda, é necessário ao menos informar um produto");
            }


            foreach (var produtoId in signature.ProdutosId)
            {
                var produtoResult = await _produtoGateway.GetAsync(urlProduto, produtoId).ConfigureAwait(false);

                if (!produtoResult.Sucesso)
                {
                    throw new Exception(produtoResult.MessagemErro);
                }

                var estoque = new EstoqueSignature()
                {
                    ProdutoId  = produtoId,
                    Quantidade = 1
                };

                var estoqueResult = await _estoqueGateway.PutAsync(urlEstoque, produtoId, estoque).ConfigureAwait(false);

                if (!estoqueResult.Sucesso)
                {
                    throw new Exception(estoqueResult.MessagemErro);
                }

                produtos.Add(new Produto(produtoResult.ObjectToSerialize.descricao, produtoResult.ObjectToSerialize.preco));

                total += produtoResult.ObjectToSerialize.preco;
            }

            var pagamento = new PagamentoSignature()
            {
                NumeroCartao   = signature.Pagamento.NumeroCartao,
                NumeroParcelas = signature.Pagamento.NumeroParcelas,
                Total          = total
            };

            var response = await _pagamentoGateway.PostAsync(urlPagamento, pagamento).ConfigureAwait(false);

            if (!response.Sucesso)
            {
                throw new Exception(response.MessagemErro);
            }


            var venda = new Models.Venda(new Pagamento(response.ObjectToSerialize.pagamentoId,
                                                       response.ObjectToSerialize.numeroCartao,
                                                       response.ObjectToSerialize.numeroParcelas,
                                                       response.ObjectToSerialize.total));

            venda.AdicionarProdutos(produtos);

            await _vendaRepository.InserirAsync(venda).ConfigureAwait(false);
        }