public IActionResult GetJourney(VehicleJourneyRequest model) { model.Validate(); var result = _trackingService.GetVehicleJourney(model); return(Ok(result)); }
public VehicleJourneyResponse GetVehicleJourney(VehicleJourneyRequest model) { var vehicle = _vehicleRepository.FindOneByCondition(x => x.VehicleNumber == model.VehicleNumber && x.IsActive); if (vehicle == null) { throw new VehicleNotFoundException(ErrorCode.E102, model.VehicleNumber); } //Get latest position depend on session var locations = _trackingSessionRepository.FindByCondition(x => x.VehicleId == vehicle.Id && x.CreatedDate >= model.From && x.CreatedDate <= model.To) .SelectMany(x => x.TrackingHistories) .Where(x => x.CreatedDate >= model.From && x.CreatedDate <= model.To) .Select(x => new LocationBase { Latitude = x.Lat, Longitude = x.Lon, LatestUpdate = x.CreatedDate }); if (!locations.Any()) { throw new JourneyNotFoundException(ErrorCode.E104, model.VehicleNumber, model.From.ToString("G"), model.To.ToString("G")); } return(new VehicleJourneyResponse() { VehicleNumber = model.VehicleNumber, Locations = locations.OrderBy(x => x.LatestUpdate).ToList() }); }