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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy