Пример #1
0
        public List <Animal> GetMatchingAnimals(AnimalSearchParameters searchParameters)
        {
            var animals = new List <Animal>();

            // Create the initial request, passing in the desired search parameters.
            var request = GetNewApiRequest(searchParameters);

            var           client   = new RestClient("https://api.petfinder.com/v2/animals");
            IRestResponse response = client.Execute(request);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                var results = JsonConvert.DeserializeObject <Animals>(response.Content);
                animals.AddRange(results.animals);

                // Since the API limits results to 100, continue calling the API until we don't have a "next" page.
                while (!String.IsNullOrWhiteSpace(results.pagination?.links?.next?.href))
                {
                    // Update the client to point to the next page of data.
                    client.BaseUrl = new Uri("https://api.petfinder.com" + results.pagination.links.next.href);

                    // Create a new request, but don't pass in any search parameters since those are included via pagination.
                    request = GetNewApiRequest(null);

                    response = client.Execute(request);
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        results = JsonConvert.DeserializeObject <Animals>(response.Content);
                        animals.AddRange(results.animals);
                    }
                    else
                    {
                        throw new Exception($"response.StatusCode was not OK ({response.StatusCode})");
                    }
                }
            }
            else
            {
                throw new Exception($"response.StatusCode was not OK ({response.StatusCode})");
            }

            return(animals);
        }
Пример #2
0
        private RestRequest GetNewApiRequest(AnimalSearchParameters searchParameters)
        {
            var request = new RestRequest(Method.GET);

            // Only get a new token from the API when we need one.
            if (_accessToken.IsExpired)
            {
                GetAuthorization();
            }

            request.AddHeader("cache-control", "no-cache");
            request.AddHeader("content-type", "application/x-www-form-urlencoded");
            request.AddHeader("authorization", $"Bearer {_accessToken.access_token}");

            if (searchParameters != null)
            {
                var requestParameters = GetRequestParameters(searchParameters);
                request.Parameters.AddRange(requestParameters);
            }

            return(request);
        }
Пример #3
0
        public static IQueryable <Animals> Filter(this IQueryable <Animals> query, AnimalSearchParameters param)
        {
            if (param.AnimalTypeID != 0)
            {
                query = query.Where(x => x.AnimalTypeId == param.AnimalTypeID);
            }

            if (param.BreedID != 0)
            {
                query = query.Where(x => x.BreedId == param.BreedID);
            }

            if (!string.IsNullOrEmpty(param.BreedName))
            {
                query = query.Where(x => x.Breed.Name.Contains(param.BreedName));
            }

            if (!string.IsNullOrEmpty(param.Name))
            {
                query = query.Where(x => x.Name.Contains(param.Name));
            }

            return(query);
        }
        public IActionResult GetList(AnimalSearchParameters param)
        {
            var query = new AnimalListQuery(queryDataSource).ExecuteQuery(param);

            return(Ok(query));
        }
Пример #5
0
        private IEnumerable <Parameter> GetRequestParameters(AnimalSearchParameters searchParameters)
        {
            // Always return the maximum number of records allowed by the API.
            yield return(new Parameter("limit", "100", ParameterType.QueryString));

            if (!String.IsNullOrWhiteSpace(searchParameters.Type))
            {
                yield return(new Parameter("type", searchParameters.Type, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Breed))
            {
                yield return(new Parameter("breed", searchParameters.Breed, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Size))
            {
                yield return(new Parameter("size", searchParameters.Size, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Gender))
            {
                yield return(new Parameter("gender", searchParameters.Gender, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Age))
            {
                yield return(new Parameter("age", searchParameters.Age, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Color))
            {
                yield return(new Parameter("color", searchParameters.Color, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Coat))
            {
                yield return(new Parameter("coat", searchParameters.Coat, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Status))
            {
                yield return(new Parameter("status", searchParameters.Status, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Name))
            {
                yield return(new Parameter("name", searchParameters.Name, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Organization))
            {
                yield return(new Parameter("organization", searchParameters.Organization, ParameterType.QueryString));
            }

            if (searchParameters.GoodWithChildren.HasValue)
            {
                yield return(new Parameter("good_with_children", searchParameters.GoodWithChildren.Value, ParameterType.QueryString));
            }

            if (searchParameters.GoodWithDogs.HasValue)
            {
                yield return(new Parameter("good_with_dogs", searchParameters.GoodWithDogs.Value, ParameterType.QueryString));
            }

            if (searchParameters.GoodWithCats.HasValue)
            {
                yield return(new Parameter("good_with_cats", searchParameters.GoodWithCats.Value, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Location))
            {
                yield return(new Parameter("location", searchParameters.Location, ParameterType.QueryString));
            }

            if (searchParameters.Distance.HasValue)
            {
                yield return(new Parameter("distance", searchParameters.Distance.Value, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Before))
            {
                yield return(new Parameter("before", searchParameters.Before, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.After))
            {
                yield return(new Parameter("after", searchParameters.After, ParameterType.QueryString));
            }

            if (!String.IsNullOrWhiteSpace(searchParameters.Sort))
            {
                yield return(new Parameter("sort", searchParameters.Sort, ParameterType.QueryString));
            }
        }
Пример #6
0
        public static Expression <Func <DM.Animals, Models.Animal> > FoodDesToFoodExpr(AnimalSearchParameters param)
        {
            var expr = LinqKit.Linq.Expr((DM.Animals item) => new Models.Animal()
            {
                AnimalID               = item.AnimalId,
                AnimalTypeID           = item.AnimalTypeId,
                AnimalTypeName         = item.AnimalType.Name,
                BreedID                = item.BreedId,
                BreedName              = item.Breed.Name,
                CreatedByPhysicianID   = item.CreatedByPhysicianId,
                CreatedByPhysicianName = item.CreatedByPhysician.FirstName + " " + item.CreatedByPhysician.LastName,
                CreatedOn              = item.CreatedOn,
                Gender                    = item.Gender,
                IsYouth                   = item.IsYouth == 0,
                LastModified              = item.LastModified,
                LastModifiedPhysicianID   = item.LastModifiedPhysicianId,
                LastModifiedPhysicianName = item.LastModifiedPhysician.FirstName + " " + item.LastModifiedPhysician.LastName,
                Name          = item.Name,
                UnitOfMeasure = item.UnitOfMeasure,
                Weight        = item.Weight
            });

            return(expr);
        }