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)); }
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 })); } }
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); }
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)); }
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 })); } }
//[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)); }
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)); }