public IEnumerable <Conductor> ObtenerConductoresCercanos(long empresaId, double latitud, double longitud) { return(_conductoresClient.ObtenerListaConductoresCercanos(new ObtenerListaConductoresCercanosRequest { Distancia = 5, EmpresaId = empresaId, Latitud = latitud, Longitud = longitud }) .Conductores .OrderBy(c => CoordenadasHelper.Distancia(c.Latitud, c.Longitud, latitud, longitud)) .Where(c => c.Disponible) .Take(3) .Select(c => c.ObtenerEntidad())); }
public ActionResult <Viaje> SolicitarViaje([FromBody] SolicitarViajeRequest request) { if (request == null) { return(BadRequest()); } var conductorCercano = _conductoresClient.ObtenerListaConductoresCercanos(new ObtenerListaConductoresCercanosRequest { Distancia = 5, EmpresaId = request.EmpresaId, Latitud = request.LatitudInicial, Longitud = request.LongitudInicial }) .Conductores .Where(c => c.Disponible) .OrderBy(c => CoordenadasHelper.Distancia(c.Latitud, c.Longitud, request.LatitudInicial, request.LongitudInicial)) .Select(c => c.ObtenerEntidad()) .FirstOrDefault(); if (conductorCercano == null) { return(NotFound("No se ha podido encontrar un conductor cercano.")); } var solicitudDeViaje = _viajesClient.Crear(new Servicios.Interno.CrearViajeRequest { Viaje = new Servicios.Interno.ViajeDTO { EmpresaID = request.EmpresaId, Inicio = Timestamp.FromDateTime(DateTime.UtcNow), PasajeroID = request.PasajeroId, PilotoID = conductorCercano.ID } }); conductorCercano.Disponible = false; _conductoresClient.ActualizarConductor(new ActualizarConductorRequest { ID = conductorCercano.ID, Conductor = conductorCercano.ObtenerDto() }); return(solicitudDeViaje.ObtenerEntidad()); }