public async Task <DroneDTO> DroneAtendePedido(Pedido pedido) { double latitudeSaidaDrone = -23.5880684; double longitudeSaidaDrone = -46.6564195; double distance = GeoCalculator.GetDistance(latitudeSaidaDrone, longitudeSaidaDrone, pedido.Latitude, pedido.Longitude, 1, DistanceUnit.Kilometers) * 2; _droneService.GerenciarDrones(); var drones = await _droneService.GetDisponiveis(); var buscaDrone = drones.Where(d => d.PerformanceRestante >= distance && d.CapacidadeRestante >= pedido.Peso).FirstOrDefault(); if (buscaDrone == null) { return(null); } buscaDrone.PerformanceRestante -= (float)distance; buscaDrone.CapacidadeRestante -= pedido.Peso; buscaDrone.Situacao = (int)EStatusDrone.AGUARDANDO; if ((buscaDrone.CapacidadeRestante <= (buscaDrone.Capacidade * 0.5)) || (buscaDrone.PerformanceRestante <= (buscaDrone.Perfomance * 0.5))) { buscaDrone.Situacao = (int)EStatusDrone.OCUPADO; } _droneService.Update(buscaDrone); return(new DroneDTO(buscaDrone, distance)); }
public ActionResult <Drone> Put(int id, [FromBody] Drone drone) { try { drone.Id = id; return(Ok(_droneService.Update(drone))); } catch (Exception e) { return(BadRequest(e.Message)); } }