private static IQueryable <Post> AddFiltersOnQuery(GetFilterPost getFilter, IQueryable <Post> posts)
        {
            if (!string.IsNullOrEmpty(getFilter?.userId))
            {
                posts = posts.Where(x => x.UserId == getFilter.userId);
            }

            return(posts);
        }
        public async Task <List <Post> > GetPosts(GetFilterPost filter = null, PaginationFilter paginationFilter = null)
        {
            var queryable = _context.Posts.AsQueryable();

            if (paginationFilter == null)
            {
                return(await queryable.Include(x => x.Tags).ToListAsync());
            }

            queryable = AddFiltersOnQuery(filter, queryable);

            var skip = (paginationFilter.PageNumber - 1) * paginationFilter.PageSize;

            return(await queryable.Include(x => x.Tags)
                   .Skip(skip).Take(paginationFilter.PageSize).ToListAsync());
        }
示例#3
0
        public async Task <IActionResult> GetAll([FromQuery] GetFilterPost getFilterPost, [FromQuery] PaginationQuery paginationQuery)
        {
            var pagination = _mapper.Map <PaginationFilter>(paginationQuery);

            var filter = _mapper.Map <GetFilterPost>(getFilterPost);

            var posts = await _postService.GetPosts(filter, pagination);

            var postsResponse = _mapper.Map <List <PostResponse> >(posts);

            if (pagination == null || pagination.PageNumber < 1 || pagination.PageSize < 1)
            {
                return(Ok(new PaginationResponse <PostResponse>(postsResponse)));
            }

            var paginationResponse = PaginationReponseHelper.CreatePaginatedResponse(_uriService, pagination, postsResponse);

            return(Ok(paginationResponse));
        }