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