private POI GetNextPOIInternal(UserTour userTour)
        {
            POI nextPOI = _userPOIRepo.GetNextPOI(userTour);

            if (nextPOI == null)
            {
                var resp = new HttpResponseMessage(HttpStatusCode.Forbidden)
                {
                    Content = new StringContent("Tour doesn't have remaining POIs")
                };
                throw new HttpResponseException(resp);
            }
            return(nextPOI);
        }
        public RouteToPointOfInterestDTO StartUserTour(int userID, int tourID, double currentLatitude, double currentLongitude)
        {
            VerifyNoTourIsStarted(userID);
            _userTourRepo.StartUserTour(userID, tourID);
            UserTour activeTour = _userTourRepo.GetActiveTour(userID);
            POI      nextPOI    = _userPOIRepo.GetNextPOI(activeTour.Id);
            IEnumerable <CoordinateDTO> route = _geoLocationService.GetRoute(currentLatitude, currentLongitude,
                                                                             nextPOI.Coordinates.Latitude.Value,
                                                                             nextPOI.Coordinates.Longitude.Value);

            return(new RouteToPointOfInterestDTO {
                NextPOI = PointOfInterestDTO.Create().Compile()(nextPOI), RouteToNextPOI = route
            });
        }