Ejemplo n.º 1
0
        public ActionResult <PagedCollectionResponse <MemberDto> > GetMembers([FromQuery] MembersFilterModel filter)
        {
            //Get the data for the current page
            var result = new PagedCollectionResponse <MemberDto>
            {
                Items = _memberService.GetFilteredMembers(filter)
            };

            if (!result.Items.Any())
            {
                return(NoContent());
            }

            //Get next page URL string
            MembersFilterModel nextFilter = filter.Clone() as MembersFilterModel;

            nextFilter.Page += 1;
            string nextUrl = !_memberService.GetFilteredMembers(nextFilter).Any()
                ? null
                : Url.Action("GetMembers", null, nextFilter, Request.Scheme);

            //Get previous page URL string
            MembersFilterModel previousFilter = filter.Clone() as MembersFilterModel;

            previousFilter.Page -= 1;
            string previousUrl = previousFilter.Page <= 0
                ? null
                : Url.Action("GetMembers", null, previousFilter, Request.Scheme);

            result.NextPage     = !IsNullOrWhiteSpace(nextUrl) ? new Uri(nextUrl) : null;
            result.PreviousPage = !IsNullOrWhiteSpace(previousUrl) ? new Uri(previousUrl) : null;

            return(Ok(result));
        }
Ejemplo n.º 2
0
        public IEnumerable <MemberDto> GetFilteredMembers(MembersFilterModel filterModel)
        {
            //Filtering logic
            var members = _db.Members
                          .Where(m => m.Name.StartsWith(filterModel.Name ??
                                                        Empty, InvariantCultureIgnoreCase))
                          .Skip((filterModel.Page - 1) * filterModel.Limit)
                          .Take(filterModel.Limit);

            return(_mapper.Map <IEnumerable <Member>, IEnumerable <MemberDto> >(members));
        }