// GET: api/ArtigosFeed public async Task <IHttpActionResult> GetArtigos(FeedArtigoPesquisaDTO feedArtigoQuery) { var usuarioAppId = base.UsuarioContexto.NomeDeUsuario; var query = db.Artigos .Where(item => item.Ativo && (!item.DataPublicacao.HasValue || item.DataPublicacao.Value <= DateTime.Now)) .OrderByDescending(item => item.DataPublicacao) as IQueryable <Artigo>; query = await DefinirFiltro(query, feedArtigoQuery); query = await DefinirQueryPaginacao(query, feedArtigoQuery); var artigos = await query.Select(x => new ArtigoBasicoFeedDTO { Id = x.Id, Titulo = x.Titulo, Thumbnail = x.Thumbnail, DataCriacao = x.DataCriacao, DataAlteracao = x.DataAlteracao, DataPublicacao = x.DataPublicacao, Tags = x.Tags, TotalCurtidas = x.Curtidas.Count, TotalComentarios = x.Comentarios.Count, UsuarioJaCurtiu = x.Curtidas.FirstOrDefault(item => item.UsuarioAppId.Equals(usuarioAppId)) != null }).ToListAsync(); var result = new FeedArtigoResultadotDto { Data = artigos, Metadata = feedArtigoQuery }; return(Ok(result)); }
private async Task <IQueryable <Artigo> > DefinirFiltro(IQueryable <Artigo> query, FeedArtigoPesquisaDTO feedArtigoQuery) { if (feedArtigoQuery == null) { return(query); } var result = query.Where(item => (string.IsNullOrEmpty(feedArtigoQuery.TituloPesquisa) || item.Titulo.Contains(feedArtigoQuery.TituloPesquisa)) && (!feedArtigoQuery.TagId.HasValue || item.Tags.Any(tag => tag.Id.Equals(feedArtigoQuery.TagId.Value))) && (!feedArtigoQuery.ApenasCurtidos || item.Curtidas.Any(curtida => curtida.UsuarioAppId.Equals(UsuarioContexto.NomeDeUsuario)))); return(result); }
private async Task <IQueryable <Artigo> > DefinirQueryPaginacao(IQueryable <Artigo> query, FeedArtigoPesquisaDTO feedArtigoQuery) { if (feedArtigoQuery == null || !feedArtigoQuery.PorRequisicao.HasValue) { return(query); } feedArtigoQuery.PaginaCorrente = feedArtigoQuery.PaginaCorrente.HasValue ? feedArtigoQuery.PaginaCorrente.Value + 1 : 1; var result = query .Skip((feedArtigoQuery.PaginaCorrente.Value - 1) * feedArtigoQuery.PorRequisicao.Value); var registrosASeremLidos = await result.CountAsync(); feedArtigoQuery.TodosRegistrosLidos = registrosASeremLidos <= feedArtigoQuery.PorRequisicao.Value; result = result.Take(feedArtigoQuery.PorRequisicao.Value); return(result); }