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 | ||||
| 	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 | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
							
								
								
									
										25
									
								
								templates/swagger/v1_json.tmpl
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										25
									
								
								templates/swagger/v1_json.tmpl
									
										
									
										generated
									
									
									
								
							|  | @ -12295,26 +12295,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" | ||||
|           }, | ||||
|  | @ -12351,14 +12352,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" | ||||
|           } | ||||
|  | @ -12369,6 +12379,9 @@ | |||
|           }, | ||||
|           "404": { | ||||
|             "$ref": "#/responses/notFound" | ||||
|           }, | ||||
|           "500": { | ||||
|             "$ref": "#/responses/error" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 6543
				6543