Exemple #1
0
        public async Task <PostsList> SearchPostsAsync(PostSearchInfo searchInfo, CancellationToken token)
        {
            var builder = Builders <Post> .Filter;
            var filter  = builder.Empty;

            if (!string.IsNullOrEmpty(searchInfo.Tag))
            {
                filter &= builder.AnyEq(post => post.Tags, searchInfo.Tag);
            }

            if (searchInfo.FromCreatedAt != null)
            {
                filter &= builder.Gte(post => post.CreatedAt, searchInfo.FromCreatedAt);
            }

            if (searchInfo.ToCreatedAt != null)
            {
                filter &= builder.Lt(post => post.CreatedAt, searchInfo.ToCreatedAt);
            }

            var cursor = this.postsCollection.Find(filter);
            var posts  = await cursor
                         .Limit(searchInfo.Limit)
                         .Skip(searchInfo.Offset)
                         .ToListAsync(token);

            var total = (int)await cursor.CountDocumentsAsync(token);

            return(new PostsList {
                Posts = posts, Total = total
            });
        }
        public async Task <ActionResult> SearchAsync([FromQuery] PostSearchInfo searchInfo, CancellationToken token)
        {
            var postsList = await this.postsService.SearchPostsAsync(searchInfo, token).ConfigureAwait(false);

            return(this.Ok(postsList));
        }