public PagedList <Dispenser> GetDispensers(DispenserResourceParameters dispenserResourseParameters) { if (dispenserResourseParameters == null) { throw new ArgumentNullException(nameof(dispenserResourseParameters)); } var collection = _context.Dispensers as IQueryable <Dispenser>; if (!string.IsNullOrWhiteSpace(dispenserResourseParameters.Type)) { var type = dispenserResourseParameters.Type.Trim(); collection = collection.Where(a => a.DispenserType == type); } if (!string.IsNullOrWhiteSpace(dispenserResourseParameters.SearchQuery)) { var searchQuery = dispenserResourseParameters.SearchQuery.Trim(); collection = collection.Where(a => a.DispenserType.Contains(searchQuery) || a.Name.Contains(searchQuery)); } if (!string.IsNullOrWhiteSpace(dispenserResourseParameters.OrderBy)) { var dispenserPropertyMappingDictionary = _propertyMappingService.GetDispenserPropertyMapping <DispenserDto, Dispenser>(); collection = collection.ApplySort(dispenserResourseParameters.OrderBy, dispenserPropertyMappingDictionary); } //Paging.... happens LAST return(PagedList <Dispenser> .Create(collection, dispenserResourseParameters.PageNumber, dispenserResourseParameters.PageSize)); }
private IEnumerable <LinkDto> CreateLinksForDispenser( DispenserResourceParameters dispenserResourceParameters, bool hasNext, bool hasPrevious) { var links = new List <LinkDto>(); // self links.Add( new LinkDto(CreateDispensersResourceUri( dispenserResourceParameters, ResourceUriType.Current) , "self", "GET")); if (hasNext) { links.Add( new LinkDto(CreateDispensersResourceUri( dispenserResourceParameters, ResourceUriType.NextPage), "nextPage", "GET")); } if (hasPrevious) { links.Add( new LinkDto(CreateDispensersResourceUri( dispenserResourceParameters, ResourceUriType.PreviousPage), "previousPage", "GET")); } return(links); }
public IActionResult GetDispensers(Guid terminalId, [FromQuery] DispenserResourceParameters dispenserResourceParameters) { if (!_propertyMappingService.ValidCompanyMappingExistsFor <CompanyDto, Entities.Company> (dispenserResourceParameters.OrderBy)) { return(BadRequest()); } dispenserResourceParameters.TerminalId = terminalId; var dispenserFromRepo = _dispenserRepository.GetDispensers(dispenserResourceParameters); var paginationMetadata = new { totalCount = dispenserFromRepo.TotalCount, pageSize = dispenserFromRepo.PageSize, currentPage = dispenserFromRepo.CurrentPage, totalPages = dispenserFromRepo.TotalPages }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); var links = CreateLinksForDispenser(dispenserResourceParameters, dispenserFromRepo.HasNext, dispenserFromRepo.HasPrevious); var shapedDispensers = _mapper.Map <IEnumerable <DispenserDto> >(dispenserFromRepo) .ShapeData(dispenserResourceParameters.Fields); var shapedDispensersWithLinks = shapedDispensers.Select(dispenser => { var dispenserAsDictionary = dispenser as IDictionary <string, object>; var dispenserLinks = CreateLinksForDispenser(terminalId.ToString(), dispenserAsDictionary["Id"].ToString(), null); dispenserAsDictionary.Add("links", dispenserLinks); return(dispenserAsDictionary); }); var linkedCollectionResource = new { value = shapedDispensersWithLinks, links }; return(Ok(linkedCollectionResource)); }
private string CreateDispensersResourceUri( DispenserResourceParameters dispenserResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link("GetDispensers", new { fields = dispenserResourceParameters.Fields, orderBy = dispenserResourceParameters.OrderBy, pageNumber = dispenserResourceParameters.PageNumber - 1, pageSize = dispenserResourceParameters.PageSize, mainCategory = dispenserResourceParameters.Type, searchQuery = dispenserResourceParameters.SearchQuery })); case ResourceUriType.NextPage: return(Url.Link("GetDispensers", new { fields = dispenserResourceParameters.Fields, orderBy = dispenserResourceParameters.OrderBy, pageNumber = dispenserResourceParameters.PageNumber + 1, pageSize = dispenserResourceParameters.PageSize, mainCategory = dispenserResourceParameters.Type, searchQuery = dispenserResourceParameters.SearchQuery })); case ResourceUriType.Current: default: return(Url.Link("GetDispensers", new { fields = dispenserResourceParameters.Fields, orderBy = dispenserResourceParameters.OrderBy, pageNumber = dispenserResourceParameters.PageNumber, pageSize = dispenserResourceParameters.PageSize, mainCategory = dispenserResourceParameters.Type, searchQuery = dispenserResourceParameters.SearchQuery })); } }