Skip to content

Commit a1dd6ab

Browse files
committed
feat(server): added query for mentions
1 parent 0988037 commit a1dd6ab

File tree

3 files changed

+55
-16
lines changed

3 files changed

+55
-16
lines changed

server/plugin/api.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ type SidebarContent struct {
8787
Reviews []*graphql.GithubPRDetails `json:"reviews"`
8888
Assignments []*github.Issue `json:"assignments"`
8989
Unreads []*FilteredNotification `json:"unreads"`
90+
Mentions []*github.Issue `json:"mentions"`
9091
}
9192

9293
type Context struct {
@@ -1037,19 +1038,19 @@ func (p *Plugin) createIssueComment(c *UserContext, w http.ResponseWriter, r *ht
10371038
p.writeJSON(w, result)
10381039
}
10391040

1040-
func (p *Plugin) getLHSData(c *UserContext) (reviewResp []*graphql.GithubPRDetails, assignmentResp []*github.Issue, openPRResp []*graphql.GithubPRDetails, err error) {
1041+
func (p *Plugin) getLHSData(c *UserContext) (reviewResp []*graphql.GithubPRDetails, assignmentResp []*github.Issue, openPRResp []*graphql.GithubPRDetails, mentionsResp []*github.Issue, err error) {
10411042
graphQLClient := p.graphQLConnect(c.GHInfo)
10421043

1043-
reviewResp, assignmentResp, openPRResp, err = graphQLClient.GetLHSData(c.Context.Ctx)
1044+
reviewResp, assignmentResp, openPRResp, mentionsResp, err = graphQLClient.GetLHSData(c.Context.Ctx)
10441045
if err != nil {
1045-
return []*graphql.GithubPRDetails{}, []*github.Issue{}, []*graphql.GithubPRDetails{}, err
1046+
return []*graphql.GithubPRDetails{}, []*github.Issue{}, []*graphql.GithubPRDetails{}, []*github.Issue{}, err
10461047
}
10471048

1048-
return reviewResp, assignmentResp, openPRResp, nil
1049+
return reviewResp, assignmentResp, openPRResp, mentionsResp, nil
10491050
}
10501051

10511052
func (p *Plugin) getSidebarData(c *UserContext) (*SidebarContent, error) {
1052-
reviewResp, assignmentResp, openPRResp, err := p.getLHSData(c)
1053+
reviewResp, assignmentResp, openPRResp, mentionsResp, err := p.getLHSData(c)
10531054
if err != nil {
10541055
return nil, err
10551056
}
@@ -1058,6 +1059,7 @@ func (p *Plugin) getSidebarData(c *UserContext) (*SidebarContent, error) {
10581059
PRs: openPRResp,
10591060
Assignments: assignmentResp,
10601061
Reviews: reviewResp,
1062+
Mentions: mentionsResp,
10611063
Unreads: p.getUnreadsData(c),
10621064
}, nil
10631065
}

server/plugin/graphql/lhs_query.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ type (
9191
ChangedFiles githubv4.Int
9292
} `graphql:"... on PullRequest"`
9393
}
94+
95+
mentionsSearchNodes assignmentSearchNodes
9496
)
9597

9698
var mainQuery struct {
@@ -120,4 +122,13 @@ var mainQuery struct {
120122
HasNextPage bool
121123
}
122124
} `graphql:"graphql: search(first:100, after:$openPrsCursor, query: $prOpenQueryArg, type: ISSUE)"`
125+
126+
Mentions struct {
127+
IssueCount int
128+
Nodes []mentionsSearchNodes
129+
PageInfo struct {
130+
EndCursor githubv4.String
131+
HasNextPage bool
132+
}
133+
} `graphql:"mentions: search(first:100, after:$mentionsCursor, query: $prMentionsQueryArg, type: ISSUE)"`
123134
}

server/plugin/graphql/lhs_request.go

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,12 @@ const (
1616
queryParamReviewsCursor = "reviewsCursor"
1717
queryParamAssignmentsCursor = "assignmentsCursor"
1818
queryParamOpenPRsCursor = "openPrsCursor"
19+
queryParamMentionsCursor = "mentionsCursor"
1920

2021
queryParamOpenPRQueryArg = "prOpenQueryArg"
2122
queryParamReviewPRQueryArg = "prReviewQueryArg"
2223
queryParamAssigneeQueryArg = "assigneeQueryArg"
24+
queryParamMentionsQueryArg = "prMentionsQueryArg"
2325
)
2426

2527
type GithubPRDetails struct {
@@ -29,51 +31,54 @@ type GithubPRDetails struct {
2931
ChangedFiles *githubv4.Int `json:"changed_files,omitempty"`
3032
}
3133

32-
func (c *Client) GetLHSData(ctx context.Context) ([]*GithubPRDetails, []*github.Issue, []*GithubPRDetails, error) {
34+
func (c *Client) GetLHSData(ctx context.Context) ([]*GithubPRDetails, []*github.Issue, []*GithubPRDetails, []*github.Issue, error) {
3335
orgsList := c.getOrganizations()
34-
var resultAssignee []*github.Issue
36+
var resultAssignee, resultMentions []*github.Issue
3537
var resultReview, resultOpenPR []*GithubPRDetails
3638

3739
params := map[string]interface{}{
3840
queryParamOpenPRQueryArg: githubv4.String(fmt.Sprintf("author:%s is:pr is:%s archived:false", c.username, githubv4.PullRequestStateOpen)),
3941
queryParamReviewPRQueryArg: githubv4.String(fmt.Sprintf("review-requested:%s is:pr is:%s archived:false", c.username, githubv4.PullRequestStateOpen)),
4042
queryParamAssigneeQueryArg: githubv4.String(fmt.Sprintf("assignee:%s is:%s archived:false", c.username, githubv4.PullRequestStateOpen)),
43+
queryParamMentionsQueryArg: githubv4.String(fmt.Sprintf("mentions:%s is:%s is:pr archived:false", c.username, githubv4.PullRequestStateOpen)),
4144
queryParamReviewsCursor: (*githubv4.String)(nil),
4245
queryParamAssignmentsCursor: (*githubv4.String)(nil),
4346
queryParamOpenPRsCursor: (*githubv4.String)(nil),
47+
queryParamMentionsCursor: (*githubv4.String)(nil),
4448
}
4549

4650
var err error
4751
for _, org := range orgsList {
48-
resultReview, resultAssignee, resultOpenPR, err = c.fetchLHSData(ctx, resultReview, resultAssignee, resultOpenPR, org, params)
52+
resultReview, resultAssignee, resultOpenPR, resultMentions, err = c.fetchLHSData(ctx, resultReview, resultAssignee, resultOpenPR, resultMentions, org, params)
4953
if err != nil {
50-
return nil, nil, nil, err
54+
return nil, nil, nil, nil, err
5155
}
5256
}
5357

5458
if len(orgsList) == 0 {
55-
return c.fetchLHSData(ctx, resultReview, resultAssignee, resultOpenPR, "", params)
59+
return c.fetchLHSData(ctx, resultReview, resultAssignee, resultOpenPR, resultMentions, "", params)
5660
}
5761

58-
return resultReview, resultAssignee, resultOpenPR, nil
62+
return resultReview, resultAssignee, resultOpenPR, resultMentions, nil
5963
}
6064

61-
func (c *Client) fetchLHSData(ctx context.Context, resultReview []*GithubPRDetails, resultAssignee []*github.Issue, resultOpenPR []*GithubPRDetails, org string, params map[string]interface{}) ([]*GithubPRDetails, []*github.Issue, []*GithubPRDetails, error) {
65+
func (c *Client) fetchLHSData(ctx context.Context, resultReview []*GithubPRDetails, resultAssignee []*github.Issue, resultOpenPR []*GithubPRDetails, resultMentions []*github.Issue, org string, params map[string]interface{}) ([]*GithubPRDetails, []*github.Issue, []*GithubPRDetails, []*github.Issue, error) {
6266
if org != "" {
6367
params[queryParamOpenPRQueryArg] = githubv4.String(fmt.Sprintf("org:%s %s", org, params[queryParamOpenPRQueryArg]))
6468
params[queryParamReviewPRQueryArg] = githubv4.String(fmt.Sprintf("org:%s %s", org, params[queryParamReviewPRQueryArg]))
6569
params[queryParamAssigneeQueryArg] = githubv4.String(fmt.Sprintf("org:%s %s", org, params[queryParamAssigneeQueryArg]))
70+
params[queryParamMentionsQueryArg] = githubv4.String(fmt.Sprintf("org:%s %s", c.org, params[queryParamMentionsQueryArg]))
6671
}
6772

68-
allReviewRequestsFetched, allAssignmentsFetched, allOpenPRsFetched := false, false, false
73+
allReviewRequestsFetched, allAssignmentsFetched, allOpenPRsFetched, allMentionsFetched := false, false, false, false
6974

7075
for {
71-
if allReviewRequestsFetched && allAssignmentsFetched && allOpenPRsFetched {
76+
if allReviewRequestsFetched && allAssignmentsFetched && allOpenPRsFetched && allMentionsFetched {
7277
break
7378
}
7479

7580
if err := c.executeQuery(ctx, &mainQuery, params); err != nil {
76-
return nil, nil, nil, errors.Wrap(err, "Not able to excute the query")
81+
return nil, nil, nil, nil, errors.Wrap(err, "Not able to excute the query")
7782
}
7883

7984
if !allReviewRequestsFetched {
@@ -117,9 +122,23 @@ func (c *Client) fetchLHSData(ctx context.Context, resultReview []*GithubPRDetai
117122

118123
params[queryParamOpenPRsCursor] = githubv4.NewString(mainQuery.OpenPullRequests.PageInfo.EndCursor)
119124
}
125+
126+
if !allMentionsFetched {
127+
for i := range mainQuery.Mentions.Nodes {
128+
resp := mainQuery.Mentions.Nodes[i]
129+
issue := newIssueFromMentionsResponse(&resp)
130+
resultMentions = append(resultMentions, issue)
131+
}
132+
133+
if !mainQuery.Mentions.PageInfo.HasNextPage {
134+
allMentionsFetched = true
135+
}
136+
137+
params[queryParamMentionsCursor] = githubv4.NewString(mainQuery.Mentions.PageInfo.EndCursor)
138+
}
120139
}
121140

122-
return resultReview, resultAssignee, resultOpenPR, nil
141+
return resultReview, resultAssignee, resultOpenPR, resultMentions, nil
123142
}
124143

125144
func getPR(prResp *prSearchNodes) *GithubPRDetails {
@@ -164,6 +183,13 @@ func newIssueFromAssignmentResponse(assignmentResp *assignmentSearchNodes) *gith
164183
return newGithubIssue(resp.Number, resp.Title, resp.Author.Login, resp.Repository.URL, resp.URL, resp.CreatedAt, resp.UpdatedAt, labels, resp.Milestone.Title)
165184
}
166185

186+
func newIssueFromMentionsResponse(assignmentResp *mentionsSearchNodes) *github.Issue {
187+
resp := assignmentResp.PullRequest
188+
labels := getGithubLabels(resp.Labels.Nodes)
189+
190+
return newGithubIssue(resp.Number, resp.Title, resp.Author.Login, resp.Repository.URL, resp.URL, resp.CreatedAt, resp.UpdatedAt, labels, resp.Milestone.Title)
191+
}
192+
167193
func getGithubLabels(labels []labelNode) []*github.Label {
168194
githubLabels := []*github.Label{}
169195
for _, label := range labels {

0 commit comments

Comments
 (0)