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); }
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); }
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)); }
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)); } }
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); }