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