public async Task TestMethodsCalled()
        {
            var pedidoFacade = new PedidoFacade(
                _pedidoService,
                _clienteRepository,
                _pedidoRepository,
                _droneRepository,
                _pagamentoServiceFactory,
                _pedidoDroneRepository);

            var pedidos = SetupTests.GetPedidosList();

            _pedidoRepository.ObterPedidos(Arg.Any <int>())
            .Returns(pedidos);
            _clienteRepository.GetByIdAsync(Arg.Any <int>())
            .Returns(SetupTests.GetCliente());
            _pedidoService.DroneAtendePedido(pedidos[0])
            .Returns(SetupTests.GetDroneDto());
            _droneRepository.GetByIdAsync(Arg.Any <int>())
            .Returns(SetupTests.GetDrone());
            _pedidoRepository.FindByIdAsync(Arg.Any <string>())
            .Returns(pedidos[0]);

            await pedidoFacade.AssignDroneAsync();


            await _pedidoService.Received().DroneAtendePedido(Arg.Any <Pedido>());

            _pedidoRepository.Received().ReplaceOne(Arg.Any <Pedido>());
            await _pedidoDroneRepository.Received().AddAsync(Arg.Any <PedidoDrone>());
        }
        public async Task <bool> Handle(AdicionarDroneCommand message, CancellationToken cancellationToken)
        {
            if (!ValidarComando(message))
            {
                return(false);
            }

            var drone = await _droneRepository.GetByIdAsync(message.Id);

            if (drone == null)
            {
                var novodrone = new Drone
                {
                    Id                = message.Id,
                    Autonomia         = message.Autonomia,
                    AutonomiaRestante = message.AutonomiaRestante,
                    Capacidade        = message.Capacidade,
                    Carga             = message.Carga,
                    Velocidade        = message.Velocidade
                };
                await _droneRepository.InsertAsync(novodrone);
            }

            return(await _droneRepository.UnitOfWork.Commit());
        }
        public async Task <List <PedidoDrone> > RetornaPedidosEmAbertoAsync()
        {
            List <PedidoDrone> pedidoDrones = new List <PedidoDrone>();

            var busca = await Context.PedidoDrones.Where(FiltroPedidosEmAberto()).ToListAsync();

            if (busca.Count > 0)
            {
                foreach (var b in busca)
                {
                    var pedido = await _pedidoRepository.GetByIdAsync(b.PedidoId);

                    pedido.Cliente = await _clienteRepository.GetByIdAsync(pedido.ClienteId);

                    var pedidoDrone = new PedidoDrone
                    {
                        Id = b.Id,
                        DataHoraFinalizacao = b.DataHoraFinalizacao,
                        DroneId             = b.DroneId,
                        PedidoId            = b.PedidoId,
                        Distancia           = b.Distancia,
                        StatusEnvio         = b.StatusEnvio,
                        Pedido = pedido,
                        Drone  = await _droneRepository.GetByIdAsync(b.DroneId),
                    };

                    pedidoDrones.Add(pedidoDrone);
                }
            }

            return(pedidoDrones);
        }
        public async Task Handle(DroneAutonomiaBaixaEvent messagem, CancellationToken cancellationToken)
        {
            var drone = await _droneRepository.GetByIdAsync(messagem.Id);

            if (drone == null)
            {
                return;
            }
            var command = new CarregarBareriaDroneCommand(capacidade: drone.Capacidade, velocidade: drone.Velocidade, autonomia: drone.Autonomia, autonomiaRestante: drone.AutonomiaRestante, carga: drone.Carga)
            {
            };
            await _bus.EnviarComando(command);
        }
示例#5
0
        public async Task CheckOut()
        {
            var pedidos = await _pedidoQueries.ObterPedidosAguardandoEntregador();

            var entregas = new List <Entrega>();

            foreach (var item in pedidos)
            {
                var drone = await _droneQueries.ObterDroneDisponiveil();

                var listaCheckout = pedidos.Where(p => p.Peso <= drone.Capacidade);
                listaCheckout = listaCheckout?.Where(p => drone.AutonomiaRestante >= new Localizacao()
                {
                    Latitude = (double)p.Latitude, Longitude = (double)p.Longitude
                }.CalcularDistanciaEmKilometros() * 2);

                foreach (var checkout in listaCheckout)
                {
                    var tempoPercurso = Convert.ToInt32(new Localizacao()
                    {
                        Latitude = (double)checkout.Latitude, Longitude = (double)checkout.Longitude
                    }.CalcularDistanciaEmKilometros() * 2);

                    if ((drone.Capacidade >= checkout.Peso) && (drone.AutonomiaRestante >= tempoPercurso))
                    {
                        entregas.Add(new Entrega()
                        {
                            PedidoId = checkout.Id, DroneId = drone.Id, DataPrevisao = DateTime.Now.AddMinutes(tempoPercurso / 2)
                        });

                        var command         = new EntregarPedidoCommand(dataPrevisao: DateTime.Now.AddMinutes(tempoPercurso / 2), checkout.Id, statusDrone: EStatusDrone.EmTransito, statusPedido: EStatusPedido.EmTransito);
                        var saiuParaEntrega = await _bus.EnviarComando(command);

                        if (saiuParaEntrega)
                        {
                            drone.Capacidade        -= checkout.Peso;
                            drone.AutonomiaRestante -= tempoPercurso;
                        }
                    }
                    else
                    {
                        break;
                    }
                }

                var droneAlterado = await _droneRepository.GetByIdAsync(drone.Id);

                droneAlterado.AutonomiaRestante = drone.AutonomiaRestante;
                await _droneRepository.UpdateAsync(droneAlterado);
            }
        }
示例#6
0
        private async Task AdicionarPedidoDrone(Pedido pedido, DroneDto drone)
        {
            var newDrone = await _droneRepository.GetByIdAsync(drone.DroneStatus.Drone.Id);

            var newPedido = await _pedidoRepository.GetByIdAsync(pedido.Id);

            var pedidoDrone = new PedidoDrone()
            {
                Distancia   = drone.Distancia,
                Drone       = newDrone,
                DroneId     = drone.DroneStatus.Drone.Id,
                Pedido      = newPedido,
                PedidoId    = pedido.Id,
                StatusEnvio = (int)StatusEnvio.AGUARDANDO
            };

            await _pedidoDroneRepository.AddAsync(pedidoDrone);
        }
示例#7
0
        public async Task <DroneViewModel> ObterDrone(Guid id)
        {
            var drone = await _droneRepository.GetByIdAsync(id);

            if (drone == null)
            {
                return(null);
            }

            return(new DroneViewModel()
            {
                Id = drone.Id,
                Autonomia = drone.Autonomia,
                AutonomiaRestante = drone.AutonomiaRestante,
                Capacidade = drone.Capacidade,
                Carga = drone.Carga,
                Velocidade = drone.Velocidade
            });
        }