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