| 6 | ) |
| 7 | |
| 8 | func (issue *Issue) ExportData(fields []string) map[string]interface{} { |
| 9 | v := reflect.ValueOf(issue).Elem() |
| 10 | data := map[string]interface{}{} |
| 11 | |
| 12 | for _, f := range fields { |
| 13 | switch f { |
| 14 | case "comments": |
| 15 | data[f] = issue.Comments.Nodes |
| 16 | case "assignees": |
| 17 | data[f] = issue.Assignees.Nodes |
| 18 | case "labels": |
| 19 | data[f] = issue.Labels.Nodes |
| 20 | case "projectCards": |
| 21 | data[f] = issue.ProjectCards.Nodes |
| 22 | case "projectItems": |
| 23 | items := make([]map[string]interface{}, 0, len(issue.ProjectItems.Nodes)) |
| 24 | for _, n := range issue.ProjectItems.Nodes { |
| 25 | items = append(items, map[string]interface{}{ |
| 26 | "status": n.Status, |
| 27 | "title": n.Project.Title, |
| 28 | }) |
| 29 | } |
| 30 | data[f] = items |
| 31 | case "closedByPullRequestsReferences": |
| 32 | items := make([]map[string]interface{}, 0, len(issue.ClosedByPullRequestsReferences.Nodes)) |
| 33 | for _, n := range issue.ClosedByPullRequestsReferences.Nodes { |
| 34 | items = append(items, map[string]interface{}{ |
| 35 | "id": n.ID, |
| 36 | "number": n.Number, |
| 37 | "url": n.URL, |
| 38 | "repository": map[string]interface{}{ |
| 39 | "id": n.Repository.ID, |
| 40 | "name": n.Repository.Name, |
| 41 | "owner": map[string]interface{}{ |
| 42 | "id": n.Repository.Owner.ID, |
| 43 | "login": n.Repository.Owner.Login, |
| 44 | }, |
| 45 | }, |
| 46 | }) |
| 47 | } |
| 48 | data[f] = items |
| 49 | case "issueType": |
| 50 | data[f] = issue.IssueType |
| 51 | case "parent": |
| 52 | if issue.Parent != nil { |
| 53 | data[f] = map[string]interface{}{ |
| 54 | "id": issue.Parent.ID, |
| 55 | "number": issue.Parent.Number, |
| 56 | "title": issue.Parent.Title, |
| 57 | "url": issue.Parent.URL, |
| 58 | "state": issue.Parent.State, |
| 59 | } |
| 60 | } else { |
| 61 | data[f] = nil |
| 62 | } |
| 63 | case "subIssues": |
| 64 | items := make([]map[string]interface{}, 0, len(issue.SubIssues.Nodes)) |
| 65 | for _, n := range issue.SubIssues.Nodes { |