private string ParseFilters()
        {
            var types = MinorFilter.ToString("|minor", "|!minor", "")
                        + BotFilter.ToString("|bot", "|!bot", "")
                        + AnonymousFilter.ToString("|anon", "|!anon", "")
                        + RedirectsFilter.ToString("|redirect", "|!redirect", "")
                        + PatrolledFilter.ToString("|patrolled", "|!patrolled", "");

            return(types.Length > 1 ? types.Substring(1) : null);
        }
示例#2
0
        protected async Task <(List <T> records, int count)> FilterAsync(InputRange <string> dateRange, MinorFilter filter)
        {
            InputRange <long?> tickRange = new InputRange <long?>();

            if (dateRange != null)
            {
                tickRange.Start = StringDateToTicks(dateRange.Start);
                tickRange.End   = StringDateToTicks(dateRange.End);
            }
            return(await _repo.FilterAsync(tickRange, filter));
        }
示例#3
0
        public async Task <(List <T> records, int count)> FilterAsync(InputRange <long?> dateRange, MinorFilter filter)
        {
            var startTicks = dateRange?.Start;
            var endTicks   = dateRange?.End;
            var categories = filter?.Categories ?? new List <string>();
            var textSearch = filter?.TextSearch ?? string.Empty;
            var minAmount  = filter?.Amount?.Start;
            var maxAmount  = filter?.Amount?.End;

            var transactions = await MultipleAsync(x =>
                                                   (startTicks == null || x.Ticks >= startTicks) &&
                                                   (endTicks == null || x.Ticks <= endTicks) &&
                                                   (categories.Count() == 0 || categories.Contains(x.Category)) &&
                                                   (string.IsNullOrEmpty(textSearch) || x.Description.ToLower().StartsWith(textSearch.ToLower())) &&
                                                   (minAmount == null || x.Amount >= minAmount) &&
                                                   (maxAmount == null || x.Amount <= maxAmount));

            var total = transactions.Count;

            var skip = filter?.Skip ?? 0;
            var take = filter?.Take ?? total;

            var page = transactions.OrderByDescending(x => x.Ticks)
                       .Skip(skip).Take(take).ToList();

            return(records : page, count : total);
        }