private IEnumerable <LinkDto> CreateLinksForSiteContact( ContactResourceParameters contactResourceParameters, bool hasNext, bool hasPrevious) { var links = new List <LinkDto>(); // self links.Add( new LinkDto(CreateContactResourceUri( contactResourceParameters, ResourceUriType.Current) , "self", "GET")); if (hasNext) { links.Add( new LinkDto(CreateContactResourceUri( contactResourceParameters, ResourceUriType.NextPage), "nextPage", "GET")); } if (hasPrevious) { links.Add( new LinkDto(CreateContactResourceUri( contactResourceParameters, ResourceUriType.PreviousPage), "previousPage", "GET")); } return(links); }
public IActionResult Get(ContactResourceParameters contactResourceParameters) { var contacts = _contactRepository.GetContacts(contactResourceParameters); var previousPageLink = contacts.HasPrevious ? CreateResourceUri(contactResourceParameters, ResourceUriType.Next) : null; var nextPageLink = contacts.HasNext ? CreateResourceUri(contactResourceParameters, ResourceUriType.Next) : null; var paginationMetadata = new { totalCount = contacts.TotalCount, pageSize = contacts.PageSize, currentPage = contacts.CurrentPage, totalPages = contacts.TotalPages, previousPage = previousPageLink, nextPage = nextPageLink }; //Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata)); return(Ok( new { contacts = _mapper.Map <IEnumerable <ContactViewModel> >(contacts), pagination = paginationMetadata } )); }
private string CreateResourceUri(ContactResourceParameters contactResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.Previous: return(_urlHelper.Link("GetContacts", new { pageNumber = contactResourceParameters.PageNumber - 1, pageSize = contactResourceParameters.PageSize })); case ResourceUriType.Next: return(_urlHelper.Link("GetContacts", new { pageNumber = contactResourceParameters.PageNumber - 1, pageSize = contactResourceParameters.PageSize })); default: return(_urlHelper.Link("GetContacts", new { pageNumber = contactResourceParameters.PageNumber, pageSize = contactResourceParameters.PageSize })); } }
public PagedList <Contact> GetCompanyContacts(Guid companyId, ContactResourceParameters contactResourseParameters) { if (contactResourseParameters == null) { throw new ArgumentNullException(nameof(contactResourseParameters)); } var collection = _context.Contact as IQueryable <Contact>; if (!string.IsNullOrWhiteSpace(contactResourseParameters.SearchQuery)) { var searchQuery = contactResourseParameters.SearchQuery.Trim(); collection = collection.Where(a => a.FirstName.Contains(searchQuery) || a.LastName.Contains(searchQuery)); } if (!string.IsNullOrWhiteSpace(contactResourseParameters.OrderBy)) { var contactPropertyMappingDictionary = _propertyMappingService.GetContactPropertyMapping <ContactDto, Contact>(); collection = collection.ApplySort(contactResourseParameters.OrderBy, contactPropertyMappingDictionary); } //Paging.... happens LAST return(PagedList <Contact> .Create(collection, contactResourseParameters.PageNumber, contactResourseParameters.PageSize)); }
public IActionResult GetContacts(Guid companyId, Guid siteTypeId, Guid siteId, [FromQuery] ContactResourceParameters contactResourceParameters) { if (!_propertyMappingService.ValidSiteMappingExistsFor <ContactDto, Entities.Contact> (contactResourceParameters.OrderBy)) { return(BadRequest()); } var contactsFromRepo = _contactRepository.GetCompanyContacts(companyId, contactResourceParameters); 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 = CreateLinksForSiteContact(contactResourceParameters, contactsFromRepo.HasNext, contactsFromRepo.HasPrevious); var shapedContacts = _mapper.Map <IEnumerable <ContactDto> >(contactsFromRepo) .ShapeData(contactResourceParameters.Fields); var shapedContactsWithLinks = shapedContacts.Select(contacts => { var siteAsDictionary = contacts as IDictionary <string, object>; var siteLinks = CreateLinksForCompanyContacts(companyId.ToString(), (string)siteAsDictionary["Id"], null); siteAsDictionary.Add("links", siteLinks); return(siteAsDictionary); }); var linkedCollectionResource = new { value = shapedContactsWithLinks, links }; return(Ok(linkedCollectionResource)); }
public IHttpActionResult GetContacts(int tpid, [FromUri] ContactResourceParameters parameters) { try { parameters = parameters ?? new ContactResourceParameters(); IEnumerable <TradingPartnerContact> contacts; if (!string.IsNullOrEmpty(parameters.SearchQuery)) { var searchQuery = parameters.SearchQuery.ToLower(); contacts = _contactReadRepository.List(c => (c.City.ToLower().Contains(searchQuery) || c.Country.ToLower().Contains(searchQuery) || c.Email.ToLower().Contains(searchQuery) || c.Name.ToLower().Contains(searchQuery) || c.Phone.ToLower().Contains(searchQuery) || c.PostalCode.ToLower().Contains(searchQuery) || c.Role.ToLower().Contains(searchQuery) || c.State.ToLower().Contains(searchQuery) || c.Street.ToLower().Contains(searchQuery)) && c.TradingPartner.Id == tpid , q => q.OrderBy(e => e.Name), "", parameters.PageNumber - 1, parameters.PageSize).ToList(); } else { contacts = _contactReadRepository.List(c => c.TradingPartner.Id == tpid , q => q.OrderBy(e => e.Name), "", parameters.PageNumber - 1, parameters.PageSize).ToList(); } if (contacts == null) { return(NotFound()); } var contactsDto = AutoMapper.Mapper.Map <IEnumerable <TradingPartnerContactDetailDto> >(contacts); return(Ok(contactsDto)); } catch (Exception ex) { //LOG //return StatusCode(HttpStatusCode.InternalServerError); return(InternalServerError(new Exception("An unexpected error occured! Please try again later!"))); } }
private string CreateContactResourceUri( ContactResourceParameters contactResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link("GetSites", new { fields = contactResourceParameters.Fields, orderBy = contactResourceParameters.OrderBy, pageNumber = contactResourceParameters.PageNumber - 1, pageSize = contactResourceParameters.PageSize, searchQuery = contactResourceParameters.SearchQuery })); case ResourceUriType.NextPage: return(Url.Link("GetSites", new { fields = contactResourceParameters.Fields, orderBy = contactResourceParameters.OrderBy, pageNumber = contactResourceParameters.PageNumber + 1, pageSize = contactResourceParameters.PageSize, searchQuery = contactResourceParameters.SearchQuery })); case ResourceUriType.Current: default: return(Url.Link("GetSites", new { fields = contactResourceParameters.Fields, orderBy = contactResourceParameters.OrderBy, pageNumber = contactResourceParameters.PageNumber, pageSize = contactResourceParameters.PageSize, searchQuery = contactResourceParameters.SearchQuery })); } }
public async Task <ActionResult <LinkedCollectionResourceWrapperDto <ContactDetailDto> > > GetContactsByDetail( [FromQuery] ContactResourceParameters contactResourceParameters) { if (!_typeHelperService.TypeHasProperties <ContactDetailDto> (contactResourceParameters.OrderBy)) { return(BadRequest()); } var query = new ContactsDetailQuery( contactResourceParameters.OrderBy, contactResourceParameters.PageNumber, contactResourceParameters.PageSize); _logger.LogInformation( "----- Sending query: ContactsDetailQuery"); var queryResult = await _mediator.Send(query); if (queryResult == null) { return(BadRequest("Query not created")); } // Prepare pagination data for response var paginationMetadata = new { totalCount = queryResult.RecordCount, pageSize = contactResourceParameters.PageSize, currentPage = contactResourceParameters.PageNumber, totalPages = queryResult.PageCount }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); return(Ok(queryResult)); }