Exemplo n.º 1
0
        // 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));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }