Skip to content

Commit efaf9d0

Browse files
committed
refactor: less repetitive interface
1 parent 70dc034 commit efaf9d0

File tree

1 file changed

+23
-66
lines changed

1 file changed

+23
-66
lines changed

pkg/github/discussions.go

Lines changed: 23 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -17,61 +17,33 @@ const DefaultGraphQLPageSize = 30
1717

1818
// Common interface for all discussion query types
1919
type DiscussionQueryResult interface {
20-
GetDiscussionNodes() []DiscussionFragment
21-
GetPageInfo() PageInfoFragment
22-
GetTotalCount() githubv4.Int
20+
GetDiscussionFragment() DiscussionFragment
2321
}
2422

2523
// 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
2826
}
2927

30-
func (q *BasicNoOrder) GetPageInfo() PageInfoFragment {
31-
return q.Repository.Discussions.PageInfo
28+
func (q *BasicWithOrder) GetDiscussionFragment() DiscussionFragment {
29+
return q.Repository.Discussions
3230
}
3331

34-
func (q *BasicNoOrder) GetTotalCount() githubv4.Int {
35-
return q.Repository.Discussions.TotalCount
32+
func (q *WithCategoryAndOrder) GetDiscussionFragment() DiscussionFragment {
33+
return q.Repository.Discussions
3634
}
3735

38-
func (q *BasicWithOrder) GetDiscussionNodes() []DiscussionFragment {
39-
return q.Repository.Discussions.Nodes
36+
func (q *WithCategoryNoOrder) GetDiscussionFragment() DiscussionFragment {
37+
return q.Repository.Discussions
4038
}
4139

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
7244
}
7345

74-
type DiscussionFragment struct {
46+
type NodeFragment struct {
7547
Number githubv4.Int
7648
Title githubv4.String
7749
CreatedAt githubv4.DateTime
@@ -94,45 +66,29 @@ type PageInfoFragment struct {
9466

9567
type BasicNoOrder struct {
9668
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)"`
10270
} `graphql:"repository(owner: $owner, name: $repo)"`
10371
}
10472

10573
type BasicWithOrder struct {
10674
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 })"`
11276
} `graphql:"repository(owner: $owner, name: $repo)"`
11377
}
11478

11579
type WithCategoryAndOrder struct {
11680
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 })"`
12282
} `graphql:"repository(owner: $owner, name: $repo)"`
12383
}
12484

12585
type WithCategoryNoOrder struct {
12686
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)"`
13288
} `graphql:"repository(owner: $owner, name: $repo)"`
13389
}
13490

135-
func fragmentToDiscussion(fragment DiscussionFragment) *github.Discussion {
91+
func fragmentToDiscussion(fragment NodeFragment) *github.Discussion {
13692
return &github.Discussion{
13793
Number: github.Ptr(int(fragment.Number)),
13894
Title: github.Ptr(string(fragment.Title)),
@@ -268,11 +224,12 @@ func ListDiscussions(getGQLClient GetGQLClientFn, t translations.TranslationHelp
268224
var pageInfo PageInfoFragment
269225
var totalCount githubv4.Int
270226
if queryResult, ok := discussionQuery.(DiscussionQueryResult); ok {
271-
for _, node := range queryResult.GetDiscussionNodes() {
227+
fragment := queryResult.GetDiscussionFragment()
228+
for _, node := range fragment.Nodes {
272229
discussions = append(discussions, fragmentToDiscussion(node))
273230
}
274-
pageInfo = queryResult.GetPageInfo()
275-
totalCount = queryResult.GetTotalCount()
231+
pageInfo = fragment.PageInfo
232+
totalCount = fragment.TotalCount
276233
}
277234

278235
// Create response with pagination info

0 commit comments

Comments
 (0)