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); }
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); } }
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); }
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 }); }