/// <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()); }
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()); }
/// <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()); }
/// <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()); }