public IAsyncEnumerable <string> Search(ICommentRepository repository, CommentQueryRequest query, CancellationToken cancellationToken = default) { var qr = repository.GetAllItems(cancellationToken).IgnoreNull(); if (!string.IsNullOrWhiteSpace(query.Author)) { qr = qr.Where(x => x.Author == query.Author); } if (!string.IsNullOrWhiteSpace(query.Email)) { qr = qr.Where(x => x.Email == query.Email); } if (!string.IsNullOrWhiteSpace(query.Link)) { qr = qr.Where(x => x.Link == query.Link); } if (!string.IsNullOrWhiteSpace(query.Uri)) { qr = qr.Where(x => x.Uri == query.Uri); } if (!string.IsNullOrWhiteSpace(query.Content)) { qr = qr.Where(x => x.Content.Contains(query.Content)); } if (!string.IsNullOrWhiteSpace(query.Term)) { qr = qr.Where(x => x.Author.Contains(query.Term) || x.Content.ToString().Contains(query.Term) ); } return(qr.Select(item => item.Id).IgnoreNull().Paging(query.Pagination)); }
public async Task <QueryStatistic> Statistic(CommentQueryRequest query, CancellationToken cancellationToken = default) { var innerQuery = ToInnerQuery(query); var count = await Service.Count(innerQuery, cancellationToken).ConfigureAwait(false); return(new QueryStatistic { Count = (int)count }); }
public async IAsyncEnumerable <string> Query(CommentQueryRequest query, [EnumeratorCancellation] CancellationToken cancellationToken = default) { var innerQuery = ToInnerQuery(query); var items = await Service.Query(innerQuery, cancellationToken).ConfigureAwait(false); foreach (var item in items.Select(x => x.Id)) { yield return(item); } }
static Loment.Models.CommentQuery ToInnerQuery(CommentQueryRequest query) { var pagination = query.Pagination ?? new Pagination { PageSize = int.MaxValue, CurrentPage = 0 }; var innerQuery = new Loment.Models.CommentQuery { Author = query.Author, Content = query.Content, Email = query.Email, Link = query.Link, Uri = query.Uri, Offset = pagination.Offset, Limit = pagination.PageSize, }; return(innerQuery); }