private IEnumerable <LinkDto> CreateLinksForDevice( DeviceResourceParameters deviceResourceParameters, bool hasNext, bool hasPrevious) { var links = new List <LinkDto>(); // self links.Add( new LinkDto(CreateDevicesResourceUri( deviceResourceParameters, ResourceUriType.Current) , "self", "GET")); if (hasNext) { links.Add( new LinkDto(CreateDevicesResourceUri( deviceResourceParameters, ResourceUriType.NextPage), "nextPage", "GET")); } if (hasPrevious) { links.Add( new LinkDto(CreateDevicesResourceUri( deviceResourceParameters, ResourceUriType.PreviousPage), "previousPage", "GET")); } return(links); }
public PagedList <Device> GetDevices(DeviceResourceParameters deviceResourseParameters) { if (deviceResourseParameters == null) { throw new ArgumentNullException(nameof(deviceResourseParameters)); } if (deviceResourseParameters.TerminalId == Guid.Empty) { throw new ArgumentNullException(nameof(deviceResourseParameters)); } var collection = _context.Device as IQueryable <Device>; collection = collection.Where(a => a.TerminalId == deviceResourseParameters.TerminalId); if (!string.IsNullOrWhiteSpace(deviceResourseParameters.SearchQuery)) { var searchQuery = deviceResourseParameters.SearchQuery.Trim(); collection = collection.Where(a => a.ModelName.Contains(searchQuery) || a.SerialNumber.Contains(searchQuery)); } if (!string.IsNullOrWhiteSpace(deviceResourseParameters.OrderBy)) { var devicePropertyMappingDictionary = _propertyMappingService.GetDevicePropertyMapping <DevicesDto, Device>(); collection = collection.ApplySort(deviceResourseParameters.OrderBy, devicePropertyMappingDictionary); } //Paging.... happens LAST return(PagedList <Device> .Create(collection, deviceResourseParameters.PageNumber, deviceResourseParameters.PageSize)); }
public IActionResult GetDevices(Guid terminalId, [FromQuery] DeviceResourceParameters deviceResourceParameters) { if (!_propertyMappingService.ValidDeviceMappingExistsFor <DevicesDto, Entities.Device> (deviceResourceParameters.OrderBy)) { return(BadRequest()); } deviceResourceParameters.TerminalId = terminalId; var devicesFromRepo = _deviceRepository.GetDevices(deviceResourceParameters); var paginationMetadata = new { totalCount = devicesFromRepo.TotalCount, pageSize = devicesFromRepo.PageSize, currentPage = devicesFromRepo.CurrentPage, totalPages = devicesFromRepo.TotalPages }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); var links = CreateLinksForDevice(deviceResourceParameters, devicesFromRepo.HasNext, devicesFromRepo.HasPrevious); var shapedDevices = _mapper.Map <IEnumerable <DevicesDto> >(devicesFromRepo) .ShapeData(deviceResourceParameters.Fields); var shapedDevicesWithLinks = shapedDevices.Select(devices => { var deviceAsDictionary = devices as IDictionary <string, object>; var deviceLinks = CreateLinksForDevice(terminalId.ToString(), (string)deviceAsDictionary["Id"], null); deviceAsDictionary.Add("links", deviceLinks); return(deviceAsDictionary); }); var linkedCollectionResource = new { value = shapedDevicesWithLinks, links }; return(Ok(linkedCollectionResource)); }
private string CreateDevicesResourceUri( DeviceResourceParameters deviceResourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link("GetDevices", new { fields = deviceResourceParameters.Fields, orderBy = deviceResourceParameters.OrderBy, pageNumber = deviceResourceParameters.PageNumber - 1, pageSize = deviceResourceParameters.PageSize, searchQuery = deviceResourceParameters.SearchQuery })); case ResourceUriType.NextPage: return(Url.Link("GetDevices", new { fields = deviceResourceParameters.Fields, orderBy = deviceResourceParameters.OrderBy, pageNumber = deviceResourceParameters.PageNumber + 1, pageSize = deviceResourceParameters.PageSize, searchQuery = deviceResourceParameters.SearchQuery })); case ResourceUriType.Current: default: return(Url.Link("GetDevices", new { fields = deviceResourceParameters.Fields, orderBy = deviceResourceParameters.OrderBy, pageNumber = deviceResourceParameters.PageNumber, pageSize = deviceResourceParameters.PageSize, searchQuery = deviceResourceParameters.SearchQuery })); } }