Ejemplo n.º 1
0
        public ActionResult <CollectionResourceDto> GetPets(
            [FromQuery] PetsResourceParameters resourceParameters)
        {
            if (!_propertyMappingService.ValidMappingExistsFor <PetDto, Pet>(resourceParameters.OrderBy))
            {
                throw new AppException(nameof(resourceParameters.OrderBy));
            }

            if (!_propertyCheckerService.TypeHasProperties <PetDto>(resourceParameters.Fields))
            {
                throw new AppException(nameof(resourceParameters.Fields));
            }

            var itemsFromRepo = _unitOfWork.Pets.Get(resourceParameters, Account);

            var paginationMetadata = new PaginationDto
                                     (
                itemsFromRepo.TotalCount,
                itemsFromRepo.PageSize,
                itemsFromRepo.CurrentPage,
                itemsFromRepo.TotalPages
                                     );

            var shapedItems = _mapper.Map <IEnumerable <PetDto> >(itemsFromRepo)
                              .ShapeData(resourceParameters.Fields);

            var collectionResource = new CollectionResourceDto(shapedItems, paginationMetadata);

            return(Ok(collectionResource));
        }
Ejemplo n.º 2
0
        public PagedList <Pet> Get(PetsResourceParameters resourceParameters, Account account)
        {
            if (resourceParameters == null)
            {
                throw new ArgumentNullException(nameof(resourceParameters));
            }

            var collection = _context.Pets
                             .Include(c => c.Race)
                             .Include(p => p.Images)
                             .Include(c => c.CreatedBy) as IQueryable <Pet>;

            var isOnlyPublished = true;

            if (account != null && (account.Role == Role.Admin || account.Id == resourceParameters.CreatedById))
            {
                collection      = collection.Where(a => a.PetStatus != PetStatus.Deleted);
                isOnlyPublished = false;
            }

            if (isOnlyPublished)
            {
                collection = collection.Where(a => a.PetStatus == PetStatus.Published);
            }

            if (resourceParameters.PetType != PetType.All)
            {
                collection = collection.Where(a => a.PetType == resourceParameters.PetType);
            }

            if (resourceParameters.CreatedById > 0)
            {
                collection = collection.Where(a => a.CreatedById == resourceParameters.CreatedById);
            }

            if (resourceParameters.CityId > 0)
            {
                collection = collection.Where(a => a.CityId == resourceParameters.CityId);
            }

            if (resourceParameters.RaceId > 0)
            {
                collection = collection.Where(a => a.RaceId == resourceParameters.RaceId);
            }

            if (resourceParameters.Age != PetAge.None)
            {
                collection = collection.Where(a => a.Age == resourceParameters.Age);
            }

            if (resourceParameters.Gender != Gender.None)
            {
                collection = collection.Where(a => a.Gender == resourceParameters.Gender);
            }

            if (resourceParameters.Size != Size.None)
            {
                collection = collection.Where(a => a.Size == resourceParameters.Size);
            }

            if (resourceParameters.FromWhere != FromWhere.None)
            {
                collection = collection.Where(a => a.FromWhere == resourceParameters.FromWhere);
            }

            if (!string.IsNullOrWhiteSpace(resourceParameters.SearchQuery))
            {
                var searchQuery = resourceParameters.SearchQuery.Trim();
                collection = collection.Where(a => a.Title.Contains(searchQuery));
            }

            if (!string.IsNullOrWhiteSpace(resourceParameters.OrderBy))
            {
                // get property mapping dictionary
                var propertyMappingDictionary =
                    _propertyMappingService.GetPropertyMapping <Models.PetDto, Pet>();

                collection = collection.ApplySort(resourceParameters.OrderBy,
                                                  propertyMappingDictionary);
            }

            return(PagedList <Pet> .Create(collection,
                                           resourceParameters.PageNumber,
                                           resourceParameters.PageSize));
        }