Exemplo n.º 1
0
        public async Task <BasePaginatedResponse <WorkItemDto> > Paginate(int projectId, WorkItemQueryParameters parameters)
        {
            Expression <Func <WorkItem, bool> > exp = w => w.ProjectId == projectId;

            if (parameters.AssigneeId.HasValue)
            {
                exp = exp.AndAlso(w => w.AssigneeId == parameters.AssigneeId.Value);
            }

            if (!string.IsNullOrWhiteSpace(parameters.Search))
            {
                exp = exp.AndAlso(w => w.Title.Contains(parameters.Search));
            }

            var workItemList = await _workItemRepository.PaginateFiltered(
                exp,
                offset : (parameters.Page - 1) *parameters.ItemsPerPage,
                itemsCount : parameters.ItemsPerPage
                );

            var workItemDtoList = _mapper.Map <IEnumerable <WorkItem>, IEnumerable <WorkItemDto> >(workItemList);

            var rowsCount = await _workItemRepository.GetFilteredDataCountAsync(exp);

            var pagesCount = (int)Math.Ceiling((decimal)rowsCount / parameters.ItemsPerPage);

            return(new BasePaginatedResponse <WorkItemDto>
            {
                EntityList = workItemDtoList,
                PagesCount = pagesCount
            });
        }