static async Task <FetchRowsResult> FetchRowsAsync(FetchRowsAsyncEventArgs e) { IssueSortOrder sortOrder = GetIssueSortOrder(e); IssueFilter filter = MakeIssueFilter(e.Filter); int take = e.Take ?? 30; var issues = await IssuesService.GetIssuesAsync( skip : e.Skip, take : take, sortOrder : sortOrder, filter : filter); return(new FetchRowsResult(issues, hasMoreRows: issues.Length == take)); }
static void CheckRestrictions(IssueSortOrder sortOrder, IssueFilter filter) { if (filter == null) { return; } if ((sortOrder == IssueSortOrder.Hot || sortOrder == IssueSortOrder.Week) && (filter.CreatedFrom != null || filter.CreatedTo != null || filter.MaxVotes != null || filter.MinVotes != null)) { throw new InvalidOperationException("Restrictions violation"); } if ((filter.MaxVotes != null || filter.MinVotes != null) && !(sortOrder == IssueSortOrder.VotesAscending || sortOrder == IssueSortOrder.VotesDescending)) { throw new InvalidOperationException("Restrictions violation"); } }
static IEnumerable <IssueData> FilterIssues(IssueFilter filter, IEnumerable <IssueData> issues) { if (filter.CreatedFrom != null) { issues = issues.Where(x => x.Created >= filter.CreatedFrom.Value); } if (filter.CreatedTo != null) { issues = issues.Where(x => x.Created < filter.CreatedTo.Value); } if (filter.MinVotes != null) { issues = issues.Where(x => x.Votes >= filter.MinVotes.Value); } if (filter.MaxVotes != null) { issues = issues.Where(x => x.Votes <= filter.MaxVotes.Value); } if (!string.IsNullOrEmpty(filter.Tag)) { issues = issues.Where(x => x.Tags.Contains(filter.Tag)); } return(issues); }
public async static Task <IssueData[]> GetIssuesAsync(int skip, int take, IssueSortOrder sortOrder, IssueFilter filter) { await Task.Delay(300).ConfigureAwait(false); CheckRestrictions(sortOrder, filter); var issues = SortIssues(sortOrder, AllIssues.Value); if (filter != null) { issues = FilterIssues(filter, issues); } return(issues.Skip(skip).Take(take).ToArray()); }