Esempio n. 1
0
        public IActionResult GetTodoItems([FromQuery] TodosResourceParameters todosResourceParameters)
        {
            var todosFromRepo = _taskRepository.GetTodoItems(todosResourceParameters);

            // genera el link de pagina previa en el paginado
            var previousPageLink = todosFromRepo.HasPrevious ?
                                   CreateTodosResourceUri(todosResourceParameters,
                                                          ResourceUriType.PreviousPage) : null;

            // genera link de pagina siguiente en el paginado
            var nextPageLink = todosFromRepo.HasNext ?
                               CreateTodosResourceUri(todosResourceParameters,
                                                      ResourceUriType.NextPage) : null;

            // se generan los datos opcionales a mandar en Header
            var paginationMetadata = new
            {
                totalCount       = todosFromRepo.TotalCount,
                pageSize         = todosFromRepo.PageSize,
                currentPage      = todosFromRepo.CurrentPage,
                totalPages       = todosFromRepo.TotalPages,
                previousPageLink = previousPageLink,
                nextPageLink     = nextPageLink
            };

            Response.Headers.Add("X-Pagination",
                                 Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata));

            return(Ok(todosFromRepo));
        }
Esempio n. 2
0
        /// <summary>
        /// obtiene el listado de Todos segun los filtros y la paginacion
        /// </summary>
        /// <param name="todosResourceParameters"></param>
        /// <returns></returns>
        public PagedList <TodoItem> GetTodoItems(TodosResourceParameters todosResourceParameters)
        {
            var collectionBeforePaging =
                _context.TodoItems
                .OrderBy(a => a.ID)
                .AsQueryable();

            if (!string.IsNullOrEmpty(todosResourceParameters.Id.ToString()))
            {
                collectionBeforePaging = collectionBeforePaging
                                         .Where(a => a.ID == todosResourceParameters.Id);
            }

            if (!string.IsNullOrEmpty(todosResourceParameters.Descripcion))
            {
                // trim & ignore casing
                var descriptionForWhereClause = todosResourceParameters.Descripcion
                                                .Trim().ToLowerInvariant();
                collectionBeforePaging = collectionBeforePaging
                                         .Where(a => a.Descripcion.ToLowerInvariant() == descriptionForWhereClause);
            }

            if (!string.IsNullOrEmpty(todosResourceParameters.Estado))
            {
                // trim & ignore casing
                var estadoForWhereClause = todosResourceParameters.Estado
                                           .Trim().ToLowerInvariant();
                collectionBeforePaging = collectionBeforePaging
                                         .Where(a => a.Estado.ToLowerInvariant() == estadoForWhereClause);
            }

            return(PagedList <TodoItem> .Create(collectionBeforePaging,
                                                todosResourceParameters.PageNumber,
                                                todosResourceParameters.PageSize));
        }
Esempio n. 3
0
        /// <summary>
        /// metodo de creacion de urls para paginado prev y next
        /// </summary>
        /// <param name="todosResourceParameters"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        private string CreateTodosResourceUri(
            TodosResourceParameters todosResourceParameters,
            ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(_urlHelper.Link("GetTodoItems",
                                       new
                {
                    id = todosResourceParameters.Id,
                    estado = todosResourceParameters.Estado,
                    descripcion = todosResourceParameters.Descripcion,
                    pageNumber = todosResourceParameters.PageNumber - 1,
                    pageSize = todosResourceParameters.PageSize
                }));

            case ResourceUriType.NextPage:
                return(_urlHelper.Link("GetTodoItems",
                                       new
                {
                    id = todosResourceParameters.Id,
                    estado = todosResourceParameters.Estado,
                    descripcion = todosResourceParameters.Descripcion,
                    pageNumber = todosResourceParameters.PageNumber + 1,
                    pageSize = todosResourceParameters.PageSize
                }));

            default:
                return(_urlHelper.Link("GetTodoItems",
                                       new
                {
                    id = todosResourceParameters.Id,
                    estado = todosResourceParameters.Estado,
                    descripcion = todosResourceParameters.Descripcion,
                    pageNumber = todosResourceParameters.PageNumber,
                    pageSize = todosResourceParameters.PageSize
                }));
            }
        }