コード例 #1
0
        public IActionResult GetJourney(VehicleJourneyRequest model)
        {
            model.Validate();
            var result = _trackingService.GetVehicleJourney(model);

            return(Ok(result));
        }
コード例 #2
0
        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()
            });
        }