public PaginacaoLista <Palavra> ObterPalavras(PalavraUrlQuery palavraUrlQuery) { var lista = new PaginacaoLista <Palavra>(); var item = _banco.Palavras.AsNoTracking().AsQueryable(); if (palavraUrlQuery.Data.HasValue) { item = item.Where(a => a.Criado > palavraUrlQuery.Data.Value || a.Atualizado > palavraUrlQuery.Data.Value); } if (palavraUrlQuery.PaginaNumero.HasValue) { var totalDeRegistro = item.Count(); item = item.Skip((palavraUrlQuery.PaginaNumero.Value - 1) * palavraUrlQuery.RegistroPagina.Value).Take(palavraUrlQuery.RegistroPagina.Value); var pagina = new Paginacao(); pagina.NumeroPagina = palavraUrlQuery.PaginaNumero.Value; pagina.RegistroPagina = palavraUrlQuery.RegistroPagina.Value; pagina.TotalDeRegistro = totalDeRegistro; pagina.TotalDePagina = (int)Math.Ceiling((double)totalDeRegistro / palavraUrlQuery.RegistroPagina.Value); lista.Paginacao = pagina; } lista.Resultados.AddRange(item.ToList()); return(lista); }
public ActionResult FindAll([FromQuery] PalavraUrlQuery palavraUrlQuery) { var item = _repository.ObterPalavras(palavraUrlQuery); if (item.Resultados.Count == 0) { return(NotFound()); } PaginacaoLista <PalavraDTO> palavraLista = CriarLinksPalavras(palavraUrlQuery, item); return(Ok(palavraLista)); }
/// <summary> /// CriarLinksPalavras Cria o link de paginação no obter todas /// </summary> /// <param name="palavraUrlQuery"></param> /// <param name="item"></param> /// <returns></returns> private PaginacaoLista <PalavraDTO> CriarLinksPalavras(PalavraUrlQuery palavraUrlQuery, PaginacaoLista <Palavra> item) { var palavraLista = _mapper.Map <PaginacaoLista <Palavra>, PaginacaoLista <PalavraDTO> >(item); foreach (var palavra in palavraLista.Resultados) { palavra.Links = new List <LinkDTO>(); palavra.Links.Add(new LinkDTO("self", Url.Link("ObterPalavra", new { id = palavra.Id }), "GET")); } palavraLista.Links.Add(new LinkDTO("self", Url.Link("ObterTodas", palavraUrlQuery), "GET")); if (item.Paginacao != null) { Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(item.Paginacao)); if (palavraUrlQuery.PaginaNumero + 1 <= item.Paginacao.TotalDePagina) { var queryString = new PalavraUrlQuery() { PaginaNumero = palavraUrlQuery.PaginaNumero + 1, RegistroPagina = palavraUrlQuery.RegistroPagina, Data = palavraUrlQuery.Data }; palavraLista.Links.Add(new LinkDTO("prox", Url.Link("ObterTodas", queryString), "GET")); } if (palavraUrlQuery.PaginaNumero - 1 > 0) { var queryString = new PalavraUrlQuery() { PaginaNumero = palavraUrlQuery.PaginaNumero - 1, RegistroPagina = palavraUrlQuery.RegistroPagina, Data = palavraUrlQuery.Data }; palavraLista.Links.Add(new LinkDTO("ant", Url.Link("ObterTodas", queryString), "GET")); } } return(palavraLista); }