protected override async Task OnExecute(CommandLineApplication app) { var connection = CreateConnection(); var orderBy = new IssueOrder { Field = IssueOrderField.CreatedAt, Direction = OrderDirection.Desc }; var states = new[] { IssueState.Open }; var query = new Query() .Viewer .Issues(first: 100, orderBy: orderBy, states: states) .Nodes .Select(pr => new { pr.Repository.NameWithOwner, pr.Title, pr.Number, pr.Author.Login, pr.CreatedAt }) .Compile(); var result = await connection.Run(query); foreach (var pr in result) { Console.WriteLine( @$ "{pr.NameWithOwner} - {pr.Title} #{pr.Number} opened on {pr.CreatedAt:D} by {pr.Login} "); } }
static async Task <IList <IssueModel> > GetIssues(Connection connection, string owner, string name) { var order = new IssueOrder { Field = IssueOrderField.CreatedAt, Direction = OrderDirection.Asc, }; var query = new Query() .Repository(owner: owner, name: name) .Issues(first: 30, labels: Labels, states: new[] { IssueState.Open }) .Nodes .Select(y => new IssueModel { Url = y.Url, Number = y.Number, Title = y.Title, Body = y.Body, CreatedAt = y.CreatedAt, Labels = y.Labels(30, null, null, null).Nodes.Select(z => z.Name).ToList(), Comments = y.Comments(100, null, null, null).Nodes.Select(c => new CommentModel { BodyHTML = c.BodyHTML, Id = c.Id.Value, PublishedAt = c.PublishedAt, AuthorLogin = c.Author.Login, AvatarUrl = c.Author.AvatarUrl(160) }).ToList() }); return((await connection.Run(query)) .ToList()); }
static async Task <IList <IssueModel> > GetIssues(Connection connection, DateTimeOffset after) { string cursor = null; var result = new List <IssueModel>(); var order = new IssueOrder { Field = IssueOrderField.CreatedAt, Direction = OrderDirection.Asc, }; do { var query = new Query() .Repository(owner: "github", name: "VisualStudio") .Issues(first: 30, after: cursor, labels: Labels, states: new[] { IssueState.Closed }) .Select(x => new { x.PageInfo.EndCursor, x.PageInfo.HasNextPage, Issues = x.Nodes.Select(y => new IssueModel { Number = y.Number, Title = y.Title, ClosedAt = y.ClosedAt, Labels = y.Labels(30, null, null, null).Nodes.Select(z => z.Name).ToList(), }).ToList(), }); var page = await connection.Run(query); foreach (var issue in page.Issues) { if (issue.ClosedAt > after) { result.Add(issue); } } if (page.HasNextPage) { cursor = page.EndCursor; } else { return(result); } } while (true); }