mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-25 08:59:31 -05:00
Allow filtering PRs by poster in the ListPullRequests API (#32209)
as title --- *Sponsored by Kithara Software GmbH* (cherry picked from commit bdd655f2bde5facada4394f36fe54e364787de7a)
This commit is contained in:
parent
059f08c00e
commit
d0af8fe4dc
3 changed files with 57 additions and 15 deletions
|
@ -26,6 +26,7 @@ type PullRequestsOptions struct {
|
||||||
SortType string
|
SortType string
|
||||||
Labels []int64
|
Labels []int64
|
||||||
MilestoneID int64
|
MilestoneID int64
|
||||||
|
PosterID int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func listPullRequestStatement(ctx context.Context, baseRepoID int64, opts *PullRequestsOptions) *xorm.Session {
|
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)
|
sess.And("issue.milestone_id=?", opts.MilestoneID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if opts.PosterID > 0 {
|
||||||
|
sess.And("issue.poster_id=?", opts.PosterID)
|
||||||
|
}
|
||||||
|
|
||||||
return sess
|
return sess
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,56 +52,79 @@ func ListPullRequests(ctx *context.APIContext) {
|
||||||
// parameters:
|
// parameters:
|
||||||
// - name: owner
|
// - name: owner
|
||||||
// in: path
|
// in: path
|
||||||
// description: owner of the repo
|
// description: Owner of the repo
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// - name: repo
|
// - name: repo
|
||||||
// in: path
|
// in: path
|
||||||
// description: name of the repo
|
// description: Name of the repo
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
// - name: state
|
// - name: state
|
||||||
// in: query
|
// in: query
|
||||||
// description: "State of pull request: open or closed (optional)"
|
// description: State of pull request
|
||||||
// type: string
|
// type: string
|
||||||
// enum: [closed, open, all]
|
// enum: [open, closed, all]
|
||||||
|
// default: open
|
||||||
// - name: sort
|
// - name: sort
|
||||||
// in: query
|
// in: query
|
||||||
// description: "Type of sort"
|
// description: Type of sort
|
||||||
// type: string
|
// type: string
|
||||||
// enum: [oldest, recentupdate, leastupdate, mostcomment, leastcomment, priority]
|
// enum: [oldest, recentupdate, leastupdate, mostcomment, leastcomment, priority]
|
||||||
// - name: milestone
|
// - name: milestone
|
||||||
// in: query
|
// in: query
|
||||||
// description: "ID of the milestone"
|
// description: ID of the milestone
|
||||||
// type: integer
|
// type: integer
|
||||||
// format: int64
|
// format: int64
|
||||||
// - name: labels
|
// - name: labels
|
||||||
// in: query
|
// in: query
|
||||||
// description: "Label IDs"
|
// description: Label IDs
|
||||||
// type: array
|
// type: array
|
||||||
// collectionFormat: multi
|
// collectionFormat: multi
|
||||||
// items:
|
// items:
|
||||||
// type: integer
|
// type: integer
|
||||||
// format: int64
|
// format: int64
|
||||||
|
// - name: poster
|
||||||
|
// in: query
|
||||||
|
// description: Filter by pull request author
|
||||||
|
// type: string
|
||||||
// - name: page
|
// - name: page
|
||||||
// in: query
|
// in: query
|
||||||
// description: page number of results to return (1-based)
|
// description: Page number of results to return (1-based)
|
||||||
// type: integer
|
// type: integer
|
||||||
|
// minimum: 1
|
||||||
|
// default: 1
|
||||||
// - name: limit
|
// - name: limit
|
||||||
// in: query
|
// in: query
|
||||||
// description: page size of results
|
// description: Page size of results
|
||||||
// type: integer
|
// type: integer
|
||||||
|
// minimum: 0
|
||||||
// responses:
|
// responses:
|
||||||
// "200":
|
// "200":
|
||||||
// "$ref": "#/responses/PullRequestList"
|
// "$ref": "#/responses/PullRequestList"
|
||||||
// "404":
|
// "404":
|
||||||
// "$ref": "#/responses/notFound"
|
// "$ref": "#/responses/notFound"
|
||||||
|
// "500":
|
||||||
|
// "$ref": "#/responses/error"
|
||||||
|
|
||||||
labelIDs, err := base.StringsToInt64s(ctx.FormStrings("labels"))
|
labelIDs, err := base.StringsToInt64s(ctx.FormStrings("labels"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusInternalServerError, "PullRequests", err)
|
ctx.Error(http.StatusInternalServerError, "PullRequests", err)
|
||||||
return
|
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)
|
listOptions := utils.GetListOptions(ctx)
|
||||||
prs, maxResults, err := issues_model.PullRequests(ctx, ctx.Repo.Repository.ID, &issues_model.PullRequestsOptions{
|
prs, maxResults, err := issues_model.PullRequests(ctx, ctx.Repo.Repository.ID, &issues_model.PullRequestsOptions{
|
||||||
ListOptions: listOptions,
|
ListOptions: listOptions,
|
||||||
|
@ -109,6 +132,7 @@ func ListPullRequests(ctx *context.APIContext) {
|
||||||
SortType: ctx.FormTrim("sort"),
|
SortType: ctx.FormTrim("sort"),
|
||||||
Labels: labelIDs,
|
Labels: labelIDs,
|
||||||
MilestoneID: ctx.FormInt64("milestone"),
|
MilestoneID: ctx.FormInt64("milestone"),
|
||||||
|
PosterID: posterID,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusInternalServerError, "PullRequests", err)
|
ctx.Error(http.StatusInternalServerError, "PullRequests", err)
|
||||||
|
|
25
templates/swagger/v1_json.tmpl
generated
25
templates/swagger/v1_json.tmpl
generated
|
@ -12295,26 +12295,27 @@
|
||||||
"parameters": [
|
"parameters": [
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "owner of the repo",
|
"description": "Owner of the repo",
|
||||||
"name": "owner",
|
"name": "owner",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true
|
"required": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "name of the repo",
|
"description": "Name of the repo",
|
||||||
"name": "repo",
|
"name": "repo",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true
|
"required": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"enum": [
|
"enum": [
|
||||||
"closed",
|
|
||||||
"open",
|
"open",
|
||||||
|
"closed",
|
||||||
"all"
|
"all"
|
||||||
],
|
],
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "State of pull request: open or closed (optional)",
|
"default": "open",
|
||||||
|
"description": "State of pull request",
|
||||||
"name": "state",
|
"name": "state",
|
||||||
"in": "query"
|
"in": "query"
|
||||||
},
|
},
|
||||||
|
@ -12351,14 +12352,23 @@
|
||||||
"in": "query"
|
"in": "query"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"type": "string",
|
||||||
|
"description": "Filter by pull request author",
|
||||||
|
"name": "poster",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"minimum": 1,
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"description": "page number of results to return (1-based)",
|
"default": 1,
|
||||||
|
"description": "Page number of results to return (1-based)",
|
||||||
"name": "page",
|
"name": "page",
|
||||||
"in": "query"
|
"in": "query"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"minimum": 0,
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"description": "page size of results",
|
"description": "Page size of results",
|
||||||
"name": "limit",
|
"name": "limit",
|
||||||
"in": "query"
|
"in": "query"
|
||||||
}
|
}
|
||||||
|
@ -12369,6 +12379,9 @@
|
||||||
},
|
},
|
||||||
"404": {
|
"404": {
|
||||||
"$ref": "#/responses/notFound"
|
"$ref": "#/responses/notFound"
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"$ref": "#/responses/error"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue