public void UpdateTickets() { var mergeValues = Rock.Lava.LavaHelper.GetCommonMergeFields(null); mergeValues.Add("JiraTopic", this); var jql = JQL.ResolveMergeFields(mergeValues); JiraClient jiraClient = new JiraClient(); var issues = jiraClient.GetTickets(jql).GetAwaiter().GetResult(); foreach (var issue in issues) { using (RockContext rockContext = new RockContext()) { JiraTicketService jiraTicketService = new JiraTicketService(rockContext); var ticket = jiraTicketService.Get(issue.Key); if (ticket == null) { ticket = new JiraTicket(); jiraTicketService.Add(ticket); } ticket.JiraTopicId = Id; ticket.JiraId = issue.Id; ticket.Key = issue.Key; ticket.Title = issue.Fields.Summary; ticket.Description = issue.Fields.Description; ticket.TicketType = ( TicketType )Enum.Parse(typeof(TicketType), issue.Fields.IssueType.Name.Replace("-", "")); ticket.CreatedDateTime = issue.Fields.Created; rockContext.SaveChanges(); } } //Now delete keys are in this topic but no longer used var activeKeys = issues.Select(i => i.Key).ToList(); RockContext deleteContext = new RockContext(); JiraTicketService jiraTicketService2 = new JiraTicketService(deleteContext); var oldTickets = jiraTicketService2.Queryable().Where(t => t.JiraTopicId == Id && !activeKeys.Contains(t.Key)).ToList(); foreach (var oldTicket in oldTickets) { jiraTicketService2.Delete(oldTicket); } deleteContext.SaveChanges(); }
public static IAsyncEnumerable <(long Id, string Json)> ToAsyncEnumerable(this JQL query, CancellationToken token = default) => new JQLAsync(query).Execute(token);