public async Task <QueryStatistic> Statistic(StatisticQueryRequest 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(StatisticQueryRequest 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); } }
public IAsyncEnumerable <string> Search(IStatisticRepository repository, StatisticQueryRequest query, CancellationToken cancellationToken = default) { var qr = repository.GetAllItems(cancellationToken).IgnoreNull(); if (!string.IsNullOrWhiteSpace(query.Category)) { qr = qr.Where(x => x.Category == query.Category); } if (!string.IsNullOrWhiteSpace(query.Uri)) { qr = qr.Where(x => x.Uri == query.Uri); } return(qr.Select(item => item.Id).IgnoreNull().Paging(query.Pagination)); }
static Listat.Models.StatisticQuery ToInnerQuery(StatisticQueryRequest query) { var pagination = query.Pagination ?? new Pagination { PageSize = int.MaxValue, CurrentPage = 0 }; var innerQuery = new Listat.Models.StatisticQuery { Category = query.Category, Payload = query.Payload, Uri = query.Uri, Offset = pagination.Offset, Limit = pagination.PageSize, }; return(innerQuery); }