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);
            }
        }
Example #3
0
        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);
        }