public async Task <bool> InserirPedido(PedidoParam pedido)
        {
            var novoPedido = new PedidoEntity
            {
                Id        = Guid.NewGuid(),
                Peso      = pedido.Peso,
                Latitude  = pedido.Latitude,
                Longitude = pedido.Longitude,
                DataHora  = pedido.DataHora,
            };

            //calculoDistancia
            novoPedido.DistanciaDaEntrega = GeolocalizacaoService.CalcularDistanciaEmMetro(pedido.Latitude, pedido.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 _droneService.SelecionarDrone(novoPedido);

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

            await _droneService.AtualizaDrone(drone);

            return(true);
        }
        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);
        }
Exemple #3
0
        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.CalcularDistanciaEmMetro(pedido.Latitude, pedido.Longitude);

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

            var drone = await _droneService.SelecionarDrone();

            if (drone == null)
            {
                novoPedido.Status = PedidoStatus.PendenteEntrega;
                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);
        }