Skip to content

Commit bdd655f

Browse files
authored
Allow filtering PRs by poster in the ListPullRequests API (#32209)
as title --- *Sponsored by Kithara Software GmbH*
1 parent fa35ace commit bdd655f

File tree

3 files changed

+57
-15
lines changed

3 files changed

+57
-15
lines changed

models/issues/pull_list.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type PullRequestsOptions struct {
2626
SortType string
2727
Labels []int64
2828
MilestoneID int64
29+
PosterID int64
2930
}
3031

3132
func listPullRequestStatement(ctx context.Context, baseRepoID int64, opts *PullRequestsOptions) *xorm.Session {
@@ -46,6 +47,10 @@ func listPullRequestStatement(ctx context.Context, baseRepoID int64, opts *PullR
4647
sess.And("issue.milestone_id=?", opts.MilestoneID)
4748
}
4849

50+
if opts.PosterID > 0 {
51+
sess.And("issue.poster_id=?", opts.PosterID)
52+
}
53+
4954
return sess
5055
}
5156

routers/api/v1/repo/pull.go

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,63 +52,87 @@ func ListPullRequests(ctx *context.APIContext) {
5252
// parameters:
5353
// - name: owner
5454
// in: path
55-
// description: owner of the repo
55+
// description: Owner of the repo
5656
// type: string
5757
// required: true
5858
// - name: repo
5959
// in: path
60-
// description: name of the repo
60+
// description: Name of the repo
6161
// type: string
6262
// required: true
6363
// - name: state
6464
// in: query
65-
// description: "State of pull request: open or closed (optional)"
65+
// description: State of pull request
6666
// type: string
67-
// enum: [closed, open, all]
67+
// enum: [open, closed, all]
68+
// default: open
6869
// - name: sort
6970
// in: query
70-
// description: "Type of sort"
71+
// description: Type of sort
7172
// type: string
7273
// enum: [oldest, recentupdate, leastupdate, mostcomment, leastcomment, priority]
7374
// - name: milestone
7475
// in: query
75-
// description: "ID of the milestone"
76+
// description: ID of the milestone
7677
// type: integer
7778
// format: int64
7879
// - name: labels
7980
// in: query
80-
// description: "Label IDs"
81+
// description: Label IDs
8182
// type: array
8283
// collectionFormat: multi
8384
// items:
8485
// type: integer
8586
// format: int64
87+
// - name: poster
88+
// in: query
89+
// description: Filter by pull request author
90+
// type: string
8691
// - name: page
8792
// in: query
88-
// description: page number of results to return (1-based)
93+
// description: Page number of results to return (1-based)
8994
// type: integer
95+
// minimum: 1
96+
// default: 1
9097
// - name: limit
9198
// in: query
92-
// description: page size of results
99+
// description: Page size of results
93100
// type: integer
101+
// minimum: 0
94102
// responses:
95103
// "200":
96104
// "$ref": "#/responses/PullRequestList"
97105
// "404":
98106
// "$ref": "#/responses/notFound"
107+
// "500":
108+
// "$ref": "#/responses/error"
99109

100110
labelIDs, err := base.StringsToInt64s(ctx.FormStrings("labels"))
101111
if err != nil {
102112
ctx.Error(http.StatusInternalServerError, "PullRequests", err)
103113
return
104114
}
115+
var posterID int64
116+
if posterStr := ctx.FormString("poster"); posterStr != "" {
117+
poster, err := user_model.GetUserByName(ctx, posterStr)
118+
if err != nil {
119+
if user_model.IsErrUserNotExist(err) {
120+
ctx.Error(http.StatusBadRequest, "Poster not found", err)
121+
} else {
122+
ctx.Error(http.StatusInternalServerError, "GetUserByName", err)
123+
}
124+
return
125+
}
126+
posterID = poster.ID
127+
}
105128
listOptions := utils.GetListOptions(ctx)
106129
prs, maxResults, err := issues_model.PullRequests(ctx, ctx.Repo.Repository.ID, &issues_model.PullRequestsOptions{
107130
ListOptions: listOptions,
108131
State: ctx.FormTrim("state"),
109132
SortType: ctx.FormTrim("sort"),
110133
Labels: labelIDs,
111134
MilestoneID: ctx.FormInt64("milestone"),
135+
PosterID: posterID,
112136
})
113137
if err != nil {
114138
ctx.Error(http.StatusInternalServerError, "PullRequests", err)

templates/swagger/v1_json.tmpl

Lines changed: 19 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)