aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/issues/pull_list.go5
-rw-r--r--routers/api/v1/repo/pull.go42
-rw-r--r--templates/swagger/v1_json.tmpl25
3 files changed, 57 insertions, 15 deletions
diff --git a/models/issues/pull_list.go b/models/issues/pull_list.go
index f80a2284f0..9155ea0834 100644
--- a/models/issues/pull_list.go
+++ b/models/issues/pull_list.go
@@ -26,6 +26,7 @@ type PullRequestsOptions struct {
SortType string
Labels []int64
MilestoneID int64
+ PosterID int64
}
func listPullRequestStatement(ctx context.Context, baseRepoID int64, opts *PullRequestsOptions) *xorm.Session {
@@ -46,6 +47,10 @@ func listPullRequestStatement(ctx context.Context, baseRepoID int64, opts *PullR
sess.And("issue.milestone_id=?", opts.MilestoneID)
}
+ if opts.PosterID > 0 {
+ sess.And("issue.poster_id=?", opts.PosterID)
+ }
+
return sess
}
diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go
index 4e3de77032..34ebcb42d5 100644
--- a/routers/api/v1/repo/pull.go
+++ b/routers/api/v1/repo/pull.go
@@ -52,56 +52,79 @@ func ListPullRequests(ctx *context.APIContext) {
// parameters:
// - name: owner
// in: path
- // description: owner of the repo
+ // description: Owner of the repo
// type: string
// required: true
// - name: repo
// in: path
- // description: name of the repo
+ // description: Name of the repo
// type: string
// required: true
// - name: state
// in: query
- // description: "State of pull request: open or closed (optional)"
+ // description: State of pull request
// type: string
- // enum: [closed, open, all]
+ // enum: [open, closed, all]
+ // default: open
// - name: sort
// in: query
- // description: "Type of sort"
+ // description: Type of sort
// type: string
// enum: [oldest, recentupdate, leastupdate, mostcomment, leastcomment, priority]
// - name: milestone
// in: query
- // description: "ID of the milestone"
+ // description: ID of the milestone
// type: integer
// format: int64
// - name: labels
// in: query
- // description: "Label IDs"
+ // description: Label IDs
// type: array
// collectionFormat: multi
// items:
// type: integer
// format: int64
+ // - name: poster
+ // in: query
+ // description: Filter by pull request author
+ // type: string
// - name: page
// in: query
- // description: page number of results to return (1-based)
+ // description: Page number of results to return (1-based)
// type: integer
+ // minimum: 1
+ // default: 1
// - name: limit
// in: query
- // description: page size of results
+ // description: Page size of results
// type: integer
+ // minimum: 0
// responses:
// "200":
// "$ref": "#/responses/PullRequestList"
// "404":
// "$ref": "#/responses/notFound"
+ // "500":
+ // "$ref": "#/responses/error"
labelIDs, err := base.StringsToInt64s(ctx.FormStrings("labels"))
if err != nil {
ctx.Error(http.StatusInternalServerError, "PullRequests", err)
return
}
+ var posterID int64
+ if posterStr := ctx.FormString("poster"); posterStr != "" {
+ poster, err := user_model.GetUserByName(ctx, posterStr)
+ if err != nil {
+ if user_model.IsErrUserNotExist(err) {
+ ctx.Error(http.StatusBadRequest, "Poster not found", err)
+ } else {
+ ctx.Error(http.StatusInternalServerError, "GetUserByName", err)
+ }
+ return
+ }
+ posterID = poster.ID
+ }
listOptions := utils.GetListOptions(ctx)
prs, maxResults, err := issues_model.PullRequests(ctx, ctx.Repo.Repository.ID, &issues_model.PullRequestsOptions{
ListOptions: listOptions,
@@ -109,6 +132,7 @@ func ListPullRequests(ctx *context.APIContext) {
SortType: ctx.FormTrim("sort"),
Labels: labelIDs,
MilestoneID: ctx.FormInt64("milestone"),
+ PosterID: posterID,
})
if err != nil {
ctx.Error(http.StatusInternalServerError, "PullRequests", err)
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index bac918ac38..2cbd8782d8 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -11209,26 +11209,27 @@
"parameters": [
{
"type": "string",
- "description": "owner of the repo",
+ "description": "Owner of the repo",
"name": "owner",
"in": "path",
"required": true
},
{
"type": "string",
- "description": "name of the repo",
+ "description": "Name of the repo",
"name": "repo",
"in": "path",
"required": true
},
{
"enum": [
- "closed",
"open",
+ "closed",
"all"
],
"type": "string",
- "description": "State of pull request: open or closed (optional)",
+ "default": "open",
+ "description": "State of pull request",
"name": "state",
"in": "query"
},
@@ -11265,14 +11266,23 @@
"in": "query"
},
{
+ "type": "string",
+ "description": "Filter by pull request author",
+ "name": "poster",
+ "in": "query"
+ },
+ {
+ "minimum": 1,
"type": "integer",
- "description": "page number of results to return (1-based)",
+ "default": 1,
+ "description": "Page number of results to return (1-based)",
"name": "page",
"in": "query"
},
{
+ "minimum": 0,
"type": "integer",
- "description": "page size of results",
+ "description": "Page size of results",
"name": "limit",
"in": "query"
}
@@ -11283,6 +11293,9 @@
},
"404": {
"$ref": "#/responses/notFound"
+ },
+ "500": {
+ "$ref": "#/responses/error"
}
}
},