コード例 #1
0
        public IActionResult GetContacts(ContactsResourceParameters contactsResourceParameters)
        {
            var peopleContactsFromRepo = _context.GetPeopleContacts(contactsResourceParameters);

            var previousPageLink = peopleContactsFromRepo.HasPrevious ? CreateContactsResourceUri(contactsResourceParameters, ResourceUriType.PreviousPage) : null;


            var nextPageLink = peopleContactsFromRepo.HasNext ? CreateContactsResourceUri(contactsResourceParameters, ResourceUriType.NextPage) : null;

            var paginationMetadata = new
            {
                totalCount       = peopleContactsFromRepo.Count,
                pageSize         = peopleContactsFromRepo.PageSize,
                currentPage      = peopleContactsFromRepo.CurrentPage,
                totalPages       = peopleContactsFromRepo.TotalPages,
                previousPageLink = previousPageLink,
                nextPageLink     = nextPageLink
            };

            Response.Headers.Add("X-Pagination",
                                 Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata));

            var result = Mapper.Map <IEnumerable <PeopleContactDto> >(peopleContactsFromRepo);

            return(Ok(result));
        }
コード例 #2
0
        private string CreateContactsResourceUri(ContactsResourceParameters contactsResourceParameters, ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(_urlHelper.Link("GetAuthors",
                                       new
                {
                    pageNumber = contactsResourceParameters.PageNumber - 1,
                    pageSize = contactsResourceParameters.PageSize
                }));

            case ResourceUriType.NextPage:
                return(_urlHelper.Link("GetAuthors",
                                       new
                {
                    pageNumber = contactsResourceParameters.PageNumber + 1,
                    pageSize = contactsResourceParameters.PageSize
                }));

            default:
                return(_urlHelper.Link("GetAuthors",
                                       new
                {
                    pageNumber = contactsResourceParameters.PageNumber,
                    pageSize = contactsResourceParameters.PageSize
                }));
            }
        }
コード例 #3
0
        private IEnumerable <LinkDto> CreateLinksForContacts(
            ContactsResourceParameters contactsResourceParameters,
            bool hasNext, bool hasPrevious)
        {
            var links = new List <LinkDto>();

            //links.Add(
            //    new LinkDto(CreateContactsResourceUri(
            //        contactsResourceParameters, ResourceUriType.Current),
            //    "self",
            //    "GET"));

            if (hasNext)
            {
                links.Add(
                    new LinkDto(CreateContactsResourceUri(
                                    contactsResourceParameters, ResourceUriType.NextPage),
                                "nextPage",
                                "GET"));
            }

            if (hasPrevious)
            {
                links.Add(
                    new LinkDto(CreateContactsResourceUri(
                                    contactsResourceParameters, ResourceUriType.PreviousPage),
                                "previousPage",
                                "GET"));
            }

            return(links);
        }
コード例 #4
0
        public PagedList <PeopleContact> GetPeopleContacts(ContactsResourceParameters contactsResourceParameters)
        {
            var collectionBeforePaging = _context.PeopleContacts
                                         .OrderBy(pc => pc.FirstName)
                                         .ThenBy(pc => pc.LastName);

            return(PagedList <PeopleContact> .Create(collectionBeforePaging, contactsResourceParameters.PageNumber, contactsResourceParameters.PageSize));
        }
コード例 #5
0
        private string CreateContactsResourceUri(
            ContactsResourceParameters contactsResourceParameters, ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(Url.Link("GetContacts",
                                new
                {
                    fields = contactsResourceParameters.Fields,
                    orderBy = contactsResourceParameters.OrderBy,
                    pageNumber = contactsResourceParameters.PageNumber - 1,
                    pageSize = contactsResourceParameters.PageSize,
                    iD = contactsResourceParameters.id,
                    firstName = contactsResourceParameters.firstname,
                    Search = contactsResourceParameters.search
                }));

            case ResourceUriType.NextPage:
                return(Url.Link("GetContacts",
                                new
                {
                    fields = contactsResourceParameters.Fields,
                    orderBy = contactsResourceParameters.OrderBy,
                    pageNumber = contactsResourceParameters.PageNumber + 1,
                    pageSize = contactsResourceParameters.PageSize,
                    iD = contactsResourceParameters.id,
                    firstName = contactsResourceParameters.firstname,
                    Search = contactsResourceParameters.search
                }));

            case ResourceUriType.Current:
                return(Url.Link("GetContacts",
                                new
                {
                    fields = contactsResourceParameters.Fields,
                    orderBy = contactsResourceParameters.OrderBy,
                    pageNumber = contactsResourceParameters.PageNumber + 1,
                    pageSize = contactsResourceParameters.PageSize,
                    iD = contactsResourceParameters.id,
                    firstName = contactsResourceParameters.firstname,
                    Search = contactsResourceParameters.search
                }));

            default:
                return(Url.Link("GetContacts",
                                new
                {
                    fields = contactsResourceParameters.Fields,
                    orderBy = contactsResourceParameters.OrderBy,
                    pageNumber = contactsResourceParameters.PageNumber,
                    pageSize = contactsResourceParameters.PageSize,
                    iD = contactsResourceParameters.id,
                    firstName = contactsResourceParameters.firstname,
                    Search = contactsResourceParameters.search
                }));
            }
        }
コード例 #6
0
        //[ResponseCache(Duration = 0)]
        public IActionResult GetContactsList(
            [FromQuery] ContactsResourceParameters contactsResourceParameters)
        {
            if (!_propertyMappingService.ValidMappingExistsFor <ContactDto, Contact>
                    (contactsResourceParameters.OrderBy))
            {
                return(BadRequest());
            }

            if (!_propertyCheckerService.TypeHasProperties <Contact>
                    (contactsResourceParameters.Fields))
            {
                return(BadRequest());
            }

            var ContactsFromRepo = _contactRepo.GetContacts(contactsResourceParameters);

            var paginationMetaData = new
            {
                totalCount  = ContactsFromRepo.TotalCount,
                pageSize    = ContactsFromRepo.PageSize,
                currentPage = ContactsFromRepo.CurrentPage,
                totalPages  = ContactsFromRepo.TotalPages
            };

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetaData));

            var links = CreateLinksForContacts(contactsResourceParameters,
                                               ContactsFromRepo.HasNext, ContactsFromRepo.HasPrevious);

            var shapedContacts = ContactsFromRepo.ShapeDatas(contactsResourceParameters.Fields);

            var shapedContactsWithLinks = shapedContacts.Select(contact =>
            {
                var contactAsDictionary = contact as IDictionary <string, object>;
                //var contactLinks = CreateLinksForContact((int)contactAsDictionary["Id"], null);
                //contactAsDictionary.Add("links", contactLinks);
                return(contactAsDictionary);
            });

            var linkedCollectionResource = new
            {
                value = shapedContactsWithLinks,
                links
            };

            return(Ok(shapedContacts));
        }
コード例 #7
0
        public PagedList <Contact> GetContacts(ContactsResourceParameters contactsResourceParameters)
        {
            if (contactsResourceParameters == null)
            {
                throw new ArgumentNullException(nameof(contactsResourceParameters));
            }

            var collection = _context.Contacts as IQueryable <Contact>;

            if (contactsResourceParameters.id != 0)
            {
                collection = _context.Contacts.Where(c => c.Id == contactsResourceParameters.id);
            }

            if (!string.IsNullOrWhiteSpace(contactsResourceParameters.firstname))
            {
                var firstName = contactsResourceParameters.firstname.Trim();
                collection = _context.Contacts.Where(c => c.FirstName == firstName);
            }

            if (!string.IsNullOrWhiteSpace(contactsResourceParameters.search))
            {
                var searchQuery = contactsResourceParameters.search.Trim();
                collection = collection.Where(c =>
                                              c.FirstName.Contains(searchQuery) ||
                                              c.LastName.Contains(searchQuery) ||
                                              c.Phone.Contains(searchQuery) ||
                                              c.Email.Contains(searchQuery));
            }

            if (!string.IsNullOrWhiteSpace(contactsResourceParameters.OrderBy))
            {
                //get property mapping dictionary
                var contactPropertyMappingDictionary =
                    _propertyMappingService.GetPropertyMapping <ContactDto, Contact>();

                collection = collection.ApplySort(contactsResourceParameters.OrderBy, contactPropertyMappingDictionary);
            }
            else
            {
                collection = collection.OrderBy(c => c.Id);
            }

            return(PagedList <Contact> .Create(collection,
                                               contactsResourceParameters.PageNumber,
                                               contactsResourceParameters.PageSize));
        }