@@ -17,61 +17,33 @@ const DefaultGraphQLPageSize = 30
17
17
18
18
// Common interface for all discussion query types
19
19
type DiscussionQueryResult interface {
20
- GetDiscussionNodes () []DiscussionFragment
21
- GetPageInfo () PageInfoFragment
22
- GetTotalCount () githubv4.Int
20
+ GetDiscussionFragment () DiscussionFragment
23
21
}
24
22
25
23
// Implement the interface for all query types
26
- func (q * BasicNoOrder ) GetDiscussionNodes () [] DiscussionFragment {
27
- return q .Repository .Discussions . Nodes
24
+ func (q * BasicNoOrder ) GetDiscussionFragment () DiscussionFragment {
25
+ return q .Repository .Discussions
28
26
}
29
27
30
- func (q * BasicNoOrder ) GetPageInfo () PageInfoFragment {
31
- return q .Repository .Discussions . PageInfo
28
+ func (q * BasicWithOrder ) GetDiscussionFragment () DiscussionFragment {
29
+ return q .Repository .Discussions
32
30
}
33
31
34
- func (q * BasicNoOrder ) GetTotalCount () githubv4. Int {
35
- return q .Repository .Discussions . TotalCount
32
+ func (q * WithCategoryAndOrder ) GetDiscussionFragment () DiscussionFragment {
33
+ return q .Repository .Discussions
36
34
}
37
35
38
- func (q * BasicWithOrder ) GetDiscussionNodes () [] DiscussionFragment {
39
- return q .Repository .Discussions . Nodes
36
+ func (q * WithCategoryNoOrder ) GetDiscussionFragment () DiscussionFragment {
37
+ return q .Repository .Discussions
40
38
}
41
39
42
- func (q * BasicWithOrder ) GetPageInfo () PageInfoFragment {
43
- return q .Repository .Discussions .PageInfo
44
- }
45
-
46
- func (q * BasicWithOrder ) GetTotalCount () githubv4.Int {
47
- return q .Repository .Discussions .TotalCount
48
- }
49
-
50
- func (q * WithCategoryAndOrder ) GetDiscussionNodes () []DiscussionFragment {
51
- return q .Repository .Discussions .Nodes
52
- }
53
-
54
- func (q * WithCategoryAndOrder ) GetPageInfo () PageInfoFragment {
55
- return q .Repository .Discussions .PageInfo
56
- }
57
-
58
- func (q * WithCategoryAndOrder ) GetTotalCount () githubv4.Int {
59
- return q .Repository .Discussions .TotalCount
60
- }
61
-
62
- func (q * WithCategoryNoOrder ) GetDiscussionNodes () []DiscussionFragment {
63
- return q .Repository .Discussions .Nodes
64
- }
65
-
66
- func (q * WithCategoryNoOrder ) GetPageInfo () PageInfoFragment {
67
- return q .Repository .Discussions .PageInfo
68
- }
69
-
70
- func (q * WithCategoryNoOrder ) GetTotalCount () githubv4.Int {
71
- return q .Repository .Discussions .TotalCount
40
+ type DiscussionFragment struct {
41
+ Nodes []NodeFragment
42
+ PageInfo PageInfoFragment
43
+ TotalCount githubv4.Int
72
44
}
73
45
74
- type DiscussionFragment struct {
46
+ type NodeFragment struct {
75
47
Number githubv4.Int
76
48
Title githubv4.String
77
49
CreatedAt githubv4.DateTime
@@ -94,45 +66,29 @@ type PageInfoFragment struct {
94
66
95
67
type BasicNoOrder struct {
96
68
Repository struct {
97
- Discussions struct {
98
- Nodes []DiscussionFragment
99
- PageInfo PageInfoFragment
100
- TotalCount githubv4.Int
101
- } `graphql:"discussions(first: $first, after: $after)"`
69
+ Discussions DiscussionFragment `graphql:"discussions(first: $first, after: $after)"`
102
70
} `graphql:"repository(owner: $owner, name: $repo)"`
103
71
}
104
72
105
73
type BasicWithOrder struct {
106
74
Repository struct {
107
- Discussions struct {
108
- Nodes []DiscussionFragment
109
- PageInfo PageInfoFragment
110
- TotalCount githubv4.Int
111
- } `graphql:"discussions(first: $first, after: $after, orderBy: { field: $orderByField, direction: $orderByDirection })"`
75
+ Discussions DiscussionFragment `graphql:"discussions(first: $first, after: $after, orderBy: { field: $orderByField, direction: $orderByDirection })"`
112
76
} `graphql:"repository(owner: $owner, name: $repo)"`
113
77
}
114
78
115
79
type WithCategoryAndOrder struct {
116
80
Repository struct {
117
- Discussions struct {
118
- Nodes []DiscussionFragment
119
- PageInfo PageInfoFragment
120
- TotalCount githubv4.Int
121
- } `graphql:"discussions(first: $first, after: $after, categoryId: $categoryId, orderBy: { field: $orderByField, direction: $orderByDirection })"`
81
+ Discussions DiscussionFragment `graphql:"discussions(first: $first, after: $after, categoryId: $categoryId, orderBy: { field: $orderByField, direction: $orderByDirection })"`
122
82
} `graphql:"repository(owner: $owner, name: $repo)"`
123
83
}
124
84
125
85
type WithCategoryNoOrder struct {
126
86
Repository struct {
127
- Discussions struct {
128
- Nodes []DiscussionFragment
129
- PageInfo PageInfoFragment
130
- TotalCount githubv4.Int
131
- } `graphql:"discussions(first: $first, after: $after, categoryId: $categoryId)"`
87
+ Discussions DiscussionFragment `graphql:"discussions(first: $first, after: $after, categoryId: $categoryId)"`
132
88
} `graphql:"repository(owner: $owner, name: $repo)"`
133
89
}
134
90
135
- func fragmentToDiscussion (fragment DiscussionFragment ) * github.Discussion {
91
+ func fragmentToDiscussion (fragment NodeFragment ) * github.Discussion {
136
92
return & github.Discussion {
137
93
Number : github .Ptr (int (fragment .Number )),
138
94
Title : github .Ptr (string (fragment .Title )),
@@ -268,11 +224,12 @@ func ListDiscussions(getGQLClient GetGQLClientFn, t translations.TranslationHelp
268
224
var pageInfo PageInfoFragment
269
225
var totalCount githubv4.Int
270
226
if queryResult , ok := discussionQuery .(DiscussionQueryResult ); ok {
271
- for _ , node := range queryResult .GetDiscussionNodes () {
227
+ fragment := queryResult .GetDiscussionFragment ()
228
+ for _ , node := range fragment .Nodes {
272
229
discussions = append (discussions , fragmentToDiscussion (node ))
273
230
}
274
- pageInfo = queryResult . GetPageInfo ()
275
- totalCount = queryResult . GetTotalCount ()
231
+ pageInfo = fragment . PageInfo
232
+ totalCount = fragment . TotalCount
276
233
}
277
234
278
235
// Create response with pagination info
0 commit comments