private void ValidateRequest(ParksServiceRequest request)
 {
     if (request.Total < 0)
     {
         throw new ArgumentOutOfRangeException("A minimum of 1 park to find is required");
     }
     if (request.ZipCode.Length != 5)
     {
         throw new ArgumentException("Invalid Zip Code");
     }
 }
        public async Task <IEnumerable <ParkDistance> > GetNearestParksAsync(ParksServiceRequest request)
        {
            ValidateRequest(request);
            var visitorCoordinates = await _googleApiClient.GetZipCoordinates(request.ZipCode);

            var parkDiststances = await GetParkDistancesAsync(request.Total, visitorCoordinates);

            request.Total   = request.Total != 0 ? request.Total : parkDiststances.Count();
            parkDiststances = parkDiststances.AsQueryable().OrderBy(a => a.Distance).Take(request.Total);
            return(parkDiststances);
        }
        public async Task <ActionResult> ParksLocator(ParksServiceRequest parksServiceRequest)
        {
            try
            {
                var parks = await _parksLocatorService.GetNearestParksAsync(parksServiceRequest);

                return(Ok(parks));
            }
            catch (Exception ex)
            {
                var message = ex.Message;
                return(BadRequest(message));
            }
        }