public async Task <IActionResult> GetSamples([FromQuery] SampleParametersDto sampleParametersDto) { // add error handling var query = new SampleListQuery(sampleParametersDto); var queryResponse = await _mediator.Send(query); var paginationMetadata = new { totalCount = queryResponse.TotalCount, pageSize = queryResponse.PageSize, currentPageSize = queryResponse.CurrentPageSize, currentStartIndex = queryResponse.CurrentStartIndex, currentEndIndex = queryResponse.CurrentEndIndex, pageNumber = queryResponse.PageNumber, totalPages = queryResponse.TotalPages, hasPrevious = queryResponse.HasPrevious, hasNext = queryResponse.HasNext }; Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetadata)); var response = new Response <IEnumerable <SampleDto> >(queryResponse); return(Ok(response)); }
public async Task <PagedList <SampleDto> > Handle(SampleListQuery request, CancellationToken cancellationToken) { if (request.QueryParameters == null) { // log error throw new ApiException("Invalid query parameters."); } // include marker -- to accomodate adding includes with craftsman commands, the next line must stay as `var result = await _db.Samples`. -- do not delete this comment var collection = _db.Samples as IQueryable <Sample>; var sieveModel = new SieveModel { Sorts = request.QueryParameters.SortOrder ?? "SampleId", Filters = request.QueryParameters.Filters }; collection = _sieveProcessor.Apply(sieveModel, collection); var dtoCollection = _db.Samples .ProjectTo <SampleDto>(_mapper.ConfigurationProvider); return(await PagedList <SampleDto> .CreateAsync(dtoCollection, request.QueryParameters.PageNumber, request.QueryParameters.PageSize)); }
public async Task <Page <SampleListItemView> > Handle(SampleListQuery query, CancellationToken cancellationToken) { var ownerId = new Guid("f8504337-b7e1-433a-8d0f-cbfedbe879bc"); var testData = new List <SampleListItemView> { new SampleListItemView { Id = Guid.NewGuid(), OwnerId = ownerId, Title = "Test list item title" }, new SampleListItemView { Id = Guid.NewGuid(), OwnerId = ownerId, Title = "Test list item title 2" }, new SampleListItemView { Id = Guid.NewGuid(), OwnerId = ownerId, Title = "Test list item title 3" } }; var items = testData .Where(o => o.OwnerId == query.OwnerId) .AsQueryable(); return(new Page <SampleListItemView> { Limit = query.Limit, Offset = query.Offset, Total = items.Count(), Items = items .Skip(query.Offset) .Take(query.Limit) }); }