Example #1
0
        /// <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;
            }
        }
Example #2
0
        /// <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."
                    );
            }
        }
Example #3
0
        /// <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);
        }
Example #5
0
 public async Task <ActionResult <IEnumerable <Dog> > > GetFilteredDogs(DogsFilter filter) =>
 Ok(await _service.GetDogsAndFilter(filter, GetUserId()));
Example #6
0
 /// <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)
     );
Example #7
0
        /// <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);
        }