예제 #1
0
        /// <summary>
        /// Lista publicações com base em uma tecnologia
        /// </summary>
        /// <param name="techieId">id da tecnologia a ser usada como base</param>
        public async Task <List <Publication> > ListPublicationsPerTechieId(ObjectId techieId)
        {
            var filter     = FilterBuilder.Exists(a => a.DeletedAt, false) & FilterBuilder.AnyEq(a => a.Techies, techieId);
            var projection = ProjectionBuilder.Slice(a => a.Comments, 0, 1); //Projeta 0 comentarios pois não vai mostrar a publicação, vai apenas calcular os dados dela então carregar os comentarios é desnecessario

            return(await Collection
                   .Find(filter)
                   .Project <Publication>(projection)
                   .ToListAsync());
        }
예제 #2
0
        public async Task <List <Publication> > ListPublications()
        {
            var filter     = FilterBuilder.Exists(a => a.DeletedAt, false);
            var sort       = SortBuilder.Descending(a => a.DateCreation);
            var projection = ProjectionBuilder.Slice(a => a.Comments, 0, 3);


            return(await Collection
                   .Find(filter)
                   .Sort(sort)
                   .Project <Publication>(projection)
                   .ToListAsync());
        }
예제 #3
0
        /// <summary>
        /// Lista todas as publicações
        /// </summary>
        /// <returns>Lista de publicações</returns>
        public async Task <List <Publication> > ListPublications(int page)
        {
            var filter     = FilterBuilder.Exists(a => a.DeletedAt, false);
            var sort       = SortBuilder.Descending(a => a.DateCreation);
            var projection = ProjectionBuilder.Slice(a => a.Comments, 0, 3);


            return(await Collection
                   .Find(filter)
                   .Sort(sort)
                   .Skip((page - 1) * UtilBO.QUANTIDADE_PAGINAS)
                   .Limit(UtilBO.QUANTIDADE_PAGINAS)
                   .Project <Publication>(projection)
                   .ToListAsync());
        }
예제 #4
0
        /// <summary>
        /// Busca publicações com base em uma palavra chave
        /// </summary>
        /// <param name="text">palavra chave</param>
        /// <param name="techiesId">Lista de tecnologias que a palavra chave se encaixa no nome</param>
        /// <param name="page">numero da pagina para paginação</param>
        /// <returns></returns>
        public async Task <List <Publication> > SearchPublications(string text, List <ObjectId> techiesId, int page)
        {
            var filter = FilterBuilder.Regex(a => a.Title, BsonRegularExpression.Create(new Regex(text, RegexOptions.IgnoreCase)))
                         | FilterBuilder.Regex(a => a.Description, BsonRegularExpression.Create(new Regex(text, RegexOptions.IgnoreCase)))
                         | FilterBuilder.AnyIn(a => a.Techies, techiesId)
                         & FilterBuilder.Exists(a => a.DeletedAt, false);

            var sort       = SortBuilder.Descending(a => a.DateCreation);
            var projection = ProjectionBuilder.Slice(a => a.Comments, 0, 3);

            return(await Collection
                   .Find(filter)
                   .Sort(sort)
                   .Skip((page - 1) * UtilBO.QUANTIDADE_PAGINAS)
                   .Limit(UtilBO.QUANTIDADE_PAGINAS)
                   .Project <Publication>(projection)
                   .ToListAsync());
        }