public async Task <Crate> ProcessExternalEvents(string curExternalEventPayload) { var issue = JsonConvert.DeserializeObject <Models.JiraIssueEvent>(curExternalEventPayload); var atlassianEventCM = new JiraIssueWithCustomFieldsCM { JiraIssue = new AtlassianIssueEvent { IssueKey = issue.Issue.Key, IssueId = issue.Issue.Id, UserId = issue.User.Email, Time = issue.Timestamp, ChangedAspect = issue.Issue.Fields.Project.Name, EventType = issue.IssueEventTypeName, IssueEvent = new Fr8.Infrastructure.Data.Manifests.JiraIssueEvent { IssueAssigneeName = issue.Issue.Fields.Assignee.DisplayName, IssueType = issue.Issue.Fields.IssueType.Name, IssueAssigneeEmailAddress = issue.Issue.Fields.Assignee.EmailAddress, IssuePriority = issue.Issue.Fields.Priority.Name, IssueResolution = issue.Issue.Fields.Resolution, IssueStatus = issue.Issue.Fields.Status.Name, IssueSummary = issue.Issue.Fields.Summary, ProjectName = issue.Issue.Fields.Project.Name, Timestamp = issue.Timestamp, UserName = issue.User.DisplayName, WebhookEvent = issue.WebhookEvent, Description = issue.Issue.Fields.Description } }, CustomFields = null }; var eventReportContent = new EventReportCM { EventNames = string.Join(",", atlassianEventCM.JiraIssue.ChangedAspect), ExternalAccountId = atlassianEventCM.JiraIssue.UserId, EventPayload = new CrateStorage(Crate.FromContent("Atlassian Issue Event", atlassianEventCM)), Manufacturer = "Atlassian" }; var curEventReport = Crate.FromContent("Atlassian Issue Event", eventReportContent); return(curEventReport); }
public override async Task Run() { var eventCrate = Payload.CrateContentsOfType <EventReportCM>(x => x.Label == "Atlassian Issue Event").FirstOrDefault(); if (eventCrate == null) { RequestPlanExecutionTermination("Atlassian event payload was not found"); return; } var atlassianEventPayload = eventCrate.EventPayload.CrateContentsOfType <JiraIssueWithCustomFieldsCM>() .FirstOrDefault(e => e.JiraIssue.ChangedAspect.Contains(ActivityUI.ProjectSelector.selectedKey)); if (atlassianEventPayload == null) { RequestPlanExecutionTermination("Atlassian event payload was not found"); return; } var jiraIssueWithCustomFields = atlassianEventPayload; JiraIssueWithCustomFieldsCM jiraIssueWithCustomFieldsCM = new JiraIssueWithCustomFieldsCM(); jiraIssueWithCustomFieldsCM.JiraIssue = jiraIssueWithCustomFields.JiraIssue; var jira = CreateJiraRestClient(); var issue = jira.GetIssue(jiraIssueWithCustomFields.JiraIssue.IssueKey); var jiraComments = issue.GetComments(); // add custom fields to the manifest var customFields = new JiraCustomField[issue.CustomFields.Count]; for (var i = 0; i < issue.CustomFields.Count; i++) { var customField = new JiraCustomField(); customField.Key = issue.CustomFields[i].Name; for (var j = 0; j < issue.CustomFields[i].Values.Length; j++) { customField.Values = new string[issue.CustomFields[i].Values.Length]; customField.Values[j] = issue.CustomFields[i].Values[j]; } customFields[i] = customField; } // add comments to the manifest var comments = new JiraComment[jiraComments.Count]; for (var i = 0; i < jiraComments.Count; i++) { var comment = new JiraComment(); comment.Author = jiraComments[i].Author; comment.Body = jiraComments[i].Body; comment.CreatedDate = jiraComments[i].CreatedDate; comment.GroupLevel = jiraComments[i].GroupLevel; comment.Id = jiraComments[i].Id; comment.RoleLevel = jiraComments[i].RoleLevel; comment.UpdateAuthor = jiraComments[i].UpdateAuthor; comment.UpdatedDate = jiraComments[i].UpdatedDate; comments[i] = comment; } jiraIssueWithCustomFieldsCM.CustomFields = customFields; jiraIssueWithCustomFieldsCM.Comments = comments; // payload in the type of JiraIssueWithCustomFieldsCM (that includes custom fields of the issue and comments) Payload.Add(Crate <JiraIssueWithCustomFieldsCM> .FromContent(RuntimeCrateLabel, jiraIssueWithCustomFieldsCM)); // payload in the type of StandardPayloadDataCM (does not include custom fields and comments) Payload.Add(Crate <StandardPayloadDataCM> .FromContent(RuntimeCrateLabel, new StandardPayloadDataCM( new KeyValueDTO(IssueKey, jiraIssueWithCustomFields.JiraIssue.IssueKey), new KeyValueDTO(ProjectName, jiraIssueWithCustomFields.JiraIssue.IssueEvent.ProjectName), new KeyValueDTO(IssueResolution, jiraIssueWithCustomFields.JiraIssue.IssueEvent.IssueResolution), new KeyValueDTO(IssuePriority, jiraIssueWithCustomFields.JiraIssue.IssueEvent.IssuePriority), new KeyValueDTO(IssueAssignee, jiraIssueWithCustomFields.JiraIssue.IssueEvent.IssueAssigneeName), new KeyValueDTO(IssueSummary, jiraIssueWithCustomFields.JiraIssue.IssueEvent.IssueSummary), new KeyValueDTO(IssueStatus, jiraIssueWithCustomFields.JiraIssue.IssueEvent.IssueStatus), new KeyValueDTO(IssueDescription, jiraIssueWithCustomFields.JiraIssue.IssueEvent.Description), new KeyValueDTO(IssueKey, jiraIssueWithCustomFields.JiraIssue.IssueKey), new KeyValueDTO(EventType, jiraIssueWithCustomFields.JiraIssue.EventType) ))); }