/// <summary> /// Initialize new DogsFilter instance and set in state based on current active dog list /// </summary> /// <param name="dogListType"><see cref="DogListType"/> current active dog list type</param> public void NewDogFilter(DogListType dogListType) { var filter = new DogsFilter() { DogListType = dogListType, AgeRange = new AgeRange() { Start = 0, End = 30 }, WeightRange = new WeightRange() { Start = 0, End = 150 } }; // set in state switch (dogListType) { case DogListType.AllDogs: Filter = filter; break; case DogListType.Owners: OwnersDogFilter = filter; break; default: Filter = filter; break; } }
/// <summary> /// Calls WebApi to get (and search/filter) all dogs or owner's dogs /// </summary> /// <param name="filter"><see cref="DogsFilter"/> object to post to WebApi</param> public async Task GetDogsAndFilter(DogsFilter filter) { // show loading animation switch (filter.DogListType) { case DogListType.AllDogs: dogsListLoading = true; break; case DogListType.Owners: ownersDogsLoading = true; break; default: Filter = filter; break; } NotifyStateChanged(); // post filter object, returns dogs HttpResponseMessage response = await _http.PostAsJsonAsync($"/api/GetDogs", filter); if (response.IsSuccessStatusCode) { var dogs = await response.Content.ReadFromJsonAsync <IEnumerable <Dog> >(); // set returned dogs into state based on which dog list is active switch (filter.DogListType) { case DogListType.AllDogs: Doggos = dogs; Filter = filter; dogsListLoading = false; break; case DogListType.Owners: OwnersDogs = dogs; OwnersDogFilter = filter; ownersDogsLoading = false; break; default: Filter = filter; break; } NotifyStateChanged(); } else { // api call failed, display error message notification _notification.DisplayMessage( NotificationType.GeneralError, "Could not return the requested dogs, please reload." ); } }
/// <summary> /// Gets all dogs. /// </summary> /// <param name="filters">The filters.</param> /// <returns>List of dogs</returns> public ResponseList<Dog> GetAllDogs(DogsFilter filters = null) { var adapter = new DogAdapterStub(); var dogs = adapter.GetAllDogs(filters); return new ResponseList<Dog>(ResultCodeEnum.Success) { Data = dogs }; }
/// <summary> /// Gets all dogs. /// </summary> /// <param name="filters">The filters.</param> /// <returns>All the dogs</returns> public IEnumerable<Dog> GetAllDogs(DogsFilter filters = null) { if (filters == null) { return Storage.Instance.Dogs; } return Storage.Instance.Dogs .FilterName(filters.Name) .FilterBreed(filters.Breed); }
public async Task <ActionResult <IEnumerable <Dog> > > GetFilteredDogs(DogsFilter filter) => Ok(await _service.GetDogsAndFilter(filter, GetUserId()));
/// <summary> /// Gets, searches, and filters all active dogs /// </summary> /// <param name="filter"><see cref="DogsFilter"/> object containing filter properties</param> /// <param name="userId">current request user Id <see cref="string"/></param> /// <returns><see cref="IEnumerable{Dogs}"/> active filtered/searched dog results </returns> public async Task<IEnumerable<Dog>> GetDogsAndFilter(DogsFilter filter, string userId) => _mapper.Map<IEnumerable<Dog>>( await _repository.FindDogsAndFilter(filter, userId) );
/// <summary> /// Find dogs, filter and search using <see cref="DogsFilter"/> object property values /// </summary> /// <param name="filter"><see cref="DogsFilter"/> object containing filter and search values</param> /// <param name="ownerId">request user <see cref="string"/>, for finding dogs owned by user</param> /// <returns><see cref="IEnumerable{Dogs}"/> found dogs list</returns> public async Task <IEnumerable <Dogs> > FindDogsAndFilter(DogsFilter filter, string ownerId) { IQueryable <Dogs> query = _dbSet .Include(d => d.Owner) .Include(d => d.DogProfileImage) .Where(d => !(d.IsDeleted ?? false)); // include Temperament, Biography, and Colors if show completed profiles requested if (filter.ShowCompletedProfiles) { query = query .Include(d => d.Temperament) .Include(d => d.Biography) .Include(d => d.Colors); } // only owner's dogs if requested if (filter.DogListType == DogListType.Owners) { query = query.Where(d => d.OwnerId == ownerId); } // filter by gender if gender not set to all if (filter.Gender != DogGenderTypes.All) { query = query.Where(d => d.Gender == (filter.Gender == DogGenderTypes.Female ? 'f' : 'm') ); } // filter using weight range if requested if (filter.FilterWeight) { query = query.Where(d => d.Weight > filter.WeightRange.Start && d.Weight < filter.WeightRange.End ); } // filter using age range (in years) if requested, based on dog's age using today's date if (filter.FilterAge) { DateTime now = DateTime.Today; int today = (now.Year * 100 + now.Month) * 100 + now.Day; query = query.Where(d => ((today - ((d.Birthday.Value.Year * 100 + d.Birthday.Value.Month) * 100 + d.Birthday.Value.Day)) / 10000) >= filter.AgeRange.Start && ((today - ((d.Birthday.Value.Year * 100 + d.Birthday.Value.Month) * 100 + d.Birthday.Value.Day)) / 10000) <= filter.AgeRange.End ); } // execute query IEnumerable <Dogs> results = await query.ToListAsync(); // filter for only completed profiles if requested (basic detials, temperament ratings, and about dog completed) if (filter.ShowCompletedProfiles) { results = FilterDogsForCompletedProfiles(results); } // search remaining results if search string is not null or empty if (!string.IsNullOrWhiteSpace(filter.SearchString)) { results = Search(results, filter.SearchString); } return(results); }