Skip to content

Commit 520b6e2

Browse files
committed
feat(server): added query for mentions
1 parent 843f899 commit 520b6e2

File tree

3 files changed

+46
-16
lines changed

3 files changed

+46
-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 []*graphql.GithubPRDetails `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 []*graphql.GithubPRDetails, 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{}, []*graphql.GithubPRDetails{}, 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: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,4 +120,13 @@ var mainQuery struct {
120120
HasNextPage bool
121121
}
122122
} `graphql:"graphql: search(first:100, after:$openPrsCursor, query: $prOpenQueryArg, type: ISSUE)"`
123+
124+
Mentions struct {
125+
IssueCount int
126+
Nodes []prSearchNodes
127+
PageInfo struct {
128+
EndCursor githubv4.String
129+
HasNextPage bool
130+
}
131+
} `graphql:"mentions: search(first:100, after:$mentionsCursor, query: $prMentionsQueryArg, type: ISSUE)"`
123132
}

server/plugin/graphql/lhs_request.go

Lines changed: 30 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, []*GithubPRDetails, error) {
3335
orgsList := c.getOrganizations()
3436
var resultAssignee []*github.Issue
35-
var resultReview, resultOpenPR []*GithubPRDetails
37+
var resultReview, resultOpenPR, resultMentions []*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 []*GithubPRDetails, org string, params map[string]interface{}) ([]*GithubPRDetails, []*github.Issue, []*GithubPRDetails, []*GithubPRDetails, 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+
pr := getPR(&resp)
130+
resultMentions = append(resultMentions, pr)
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 {

0 commit comments

Comments
 (0)