public async Task <Pedido> RealizarPedido(RealizarPedidoRequest pedidoRequest, string userName)
        {
            // Encontra cliente pelo Usuário Logado (Token)
            var cliente = await _clienteRepository.GetByUserName(userName);

            if (cliente == null)
            {
                throw new Exception("Cliente não localizado");
            }
            // Cálcula a distância para o pedido
            var distancia = GEOCalculaDistancia.CalculaDistanciaEmKM(new GEOParams(LATITUDE, LONGITUDE, cliente.Latitude, cliente.Longitude));
            var pagamento = new PagamentoCartao(
                pedidoRequest.Bandeira,
                pedidoRequest.Numero,
                pedidoRequest.Vencimento,
                pedidoRequest.CodigoSeguranca,
                pedidoRequest.Valor,
                StatusCartao.aguardandoAprovacao
                );
            // Salva o pedido na base
            var pedido = new Pedido
            {
                Cliente             = cliente,
                DataHora            = DateTime.Now,
                Peso                = pedidoRequest.Peso,
                DistanciaParaOrigem = distancia,
                StatusPedido        = StatusPedido.aguardandoAprovacao,
                PagamentoCartao     = pagamento
            };
            //await _pedidoRepository.AddPedido(pedido);
            await _pedidoRepository.AddPedido(pedido);

            // Envia o pedido para Pagamento
            var pagamentoREquest = new CmmPagRequest()
            {
                Bandeira        = pagamento.Bandeira,
                CodigoSeguranca = pagamento.CodigoSeguranca,
                CreatedAt       = DateTime.Now,
                Name            = cliente.Nome,
                NumeroCartao    = pagamento.Numero,
                PayId           = pagamento.Id,
                Status          = StatusCartao.aguardandoAprovacao,
                Valor           = pagamento.Valor,
                Vencimento      = pagamento.Vencimento
            };
            var result = await _payAPIHandler.PostRealizarPagamento(pagamentoREquest);

            if (!result.IsSuccessStatusCode)
            {
                throw new Exception("Falha ao realizar o pagamento");
            }
            return(pedido);
        }
示例#2
0
        public async Task <Pedido> RealizarPedido(RealizarPedidoRequest pedidoRequest, string userName)
        {
            var cliente = await _clienteRepository.GetByUserName(userName);

            if (cliente == null)
            {
                throw new Exception("Cliente não localizado");
            }
            var distancia = GEOCalculaDistancia.CalculaDistanciaEmKM(new GEOParams(LATITUDE, LONGITUDE, cliente.Latitude, cliente.Longitude));
            var pedido    = new Pedido
            {
                Id                  = Guid.NewGuid(),
                Cliente             = cliente,
                DataHora            = DateTime.Now,
                Peso                = pedidoRequest.Peso,
                DistanciaParaOrigem = distancia,
                StatusPedido        = StatusPedido.aguardandoEntrega
            };
            await _pedidoRepository.AddPedido(pedido);

            return(pedido);
        }
        public void TestaCalculaDistancia(double latitudeOrigem, double longitudeOrigem, double latitudeDestino, double longitudeDestino, double resultado)
        {
            var result = GEOCalculaDistancia.CalculaDistanciaEmKM(new GEOParams(latitudeOrigem, longitudeOrigem, latitudeDestino, longitudeDestino));

            Assert.Equal(resultado, result);
        }