public async Task <bool> InserirPedido(PedidoParam pedido)
        {
            var userDono = await _usuariosRepository.GetSingleByLogin(pedido.Login);

            var novoPedido = new PedidoEntity
            {
                Id          = Guid.NewGuid(),
                Peso        = pedido.Peso,
                DataHora    = pedido.DataHora,
                CompradorId = userDono.Id
            };

            //calculoDistancia
            novoPedido.DistanciaDaEntrega = GeolocalizacaoService.CalcularDistanciaEmMetro(userDono.Latitude, userDono.Longitude);
            //var distanciaEmMilhas = GeolocalizacaoService.distance(pedido.Latitude, pedido.Longitude, 'M');
            //var distanciaEmMilhasNauticas = GeolocalizacaoService.distance(pedido.Latitude, pedido.Longitude, 'N');

            if (!novoPedido.ValidaPedido())
            {
                return(false);
            }

            var drone = await _droneCommand.SelecionarDrone(novoPedido);

            novoPedido.Drone   = drone;
            novoPedido.DroneId = drone != null ? drone.Id : novoPedido.DroneId;
            novoPedido.Status  = PedidoStatus.PendenteEntrega.ToString();
            await _pedidosRepository.Inserir(novoPedido);

            await _droneCommand.AtualizaDrone(drone);

            return(true);
        }
        public async Task <bool> InserirPedido(PedidoParam pedido)
        {
            if (!ValidaPedido(pedido, out var novoPedido, out var distancia))
            {
                return(false);
            }

            if (await SelecionaDroneInserirPedido(novoPedido))
            {
                return(true);
            }

            return(true);
        }
        public async Task <IActionResult> ReceberPedido(PedidoParam pedido)
        {
            try
            {
                var resultado = await _pedidoService.InserirPedido(pedido);

                if (!resultado)
                {
                    return(BadRequest("Pedido não aceito"));
                }
                return(Ok());
            }
            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }
Esempio n. 4
0
        public async Task <IActionResult> Cadastrar(PedidoParam pedido)
        {
            try
            {
                pedido.Login = _login;

                var resultado = await _pedidoCommand.InserirPedido(pedido);

                if (!resultado)
                {
                    return(BadRequest("Pedido não aceito"));
                }
                return(Ok("Pedido realizado com sucesso!"));
            }
            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }
        private static bool ValidaPedido(PedidoParam pedido, out PedidoEntity novoPedido, out double distancia)
        {
            novoPedido = new PedidoEntity
            {
                PesoGramas = pedido.Peso,
                Latitude   = pedido.Latitude,
                Longitude  = pedido.Longitude,
                DataHora   = pedido.DataHora,
            };

            //calculoDistancia

            distancia = GeolocalizacaoService.CalcularDistanciaEmMetro(pedido.Latitude, pedido.Longitude);

            if (!novoPedido.ValidaPedido(distancia))
            {
                return(false);
            }
            return(true);
        }
        public async Task <bool> InserirPedido(PedidoParam pedido)
        {
            var novoPedido = new PedidoEntity
            {
                PesoGramas = pedido.Peso,
                Latitude   = pedido.Latitude,
                Longitude  = pedido.Longitude,
                DataHora   = pedido.DataHora,
            };

            //calculoDistancia

            var distancia = GeolocalizacaoService.CalcularDistanciaEmKm(pedido.Latitude, pedido.Longitude);

            if (!novoPedido.ValidaPedido(distancia))
            {
                return(false);
            }

            var drone = await _droneService.SelecionarDrone();

            if (drone == null)
            {
                novoPedido.Status  = PedidoStatus.PendenteEntrega;
                novoPedido.DroneId = null;
                await _pedidosRepository.Inserir(novoPedido);

                return(true);
            }

            novoPedido.Drone   = drone;
            novoPedido.DroneId = drone.Id;
            novoPedido.Status  = PedidoStatus.EmTransito;
            await _pedidosRepository.Inserir(novoPedido);

            await _droneService.AtualizaDrone(drone);

            return(true);
        }
Esempio n. 7
0
        public async Task <bool> InserirPedido(PedidoParam pedido)
        {
            var userDono = await _usuariosRepository.GetSingleByLogin(pedido.Login);

            var novoPedido = pedido.ConvertTo <PedidoEntity>();

            novoPedido.Id          = Guid.NewGuid();
            novoPedido.CompradorId = userDono.Id;


            //calculoDistancia
            novoPedido.DistanciaDaEntrega = GeolocalizacaoService.CalcularDistanciaEmMetro(userDono.Latitude, userDono.Longitude);

            if (!novoPedido.ValidaPedido())
            {
                return(false);
            }

            var drone = await _droneCommand.SelecionarDrone(novoPedido);

            novoPedido.Drone   = drone;
            novoPedido.DroneId = drone != null ? drone.Id : novoPedido.DroneId;

            novoPedido.Status = PedidoStatus.PendenteEntrega.ToString();
            await _pedidosRepository.Inserir(novoPedido);

            var pagamentoCartao = novoPedido.ConvertTo <PagamentoCartaoParam>();

            pagamentoCartao.IdPedido = novoPedido.Id;

            await _pagamentoExternalContext.EfetuarPagamentoCartao(pagamentoCartao);

            await _droneCommand.AtualizaDrone(drone);

            return(true);
        }