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