From f6030dad976859cccfbb524a2895a1e7d9884b57 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 7 Oct 2024 11:08:42 +0200 Subject: [PATCH 1/5] API: add owner filter to repo.ListPullRequests --- models/issues/pull_list.go | 5 +++++ routers/api/v1/repo/pull.go | 18 ++++++++++++++++++ templates/swagger/v1_json.tmpl | 6 ++++++ 3 files changed, 29 insertions(+) diff --git a/models/issues/pull_list.go b/models/issues/pull_list.go index f80a2284f0962..8056f9e2c7fe1 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 + OwnerID 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.OwnerID > 0 { + sess.And("issue.owner_id=?", opts.OwnerID) + } + return sess } diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go index 4e3de77032fb5..50c9d257df16e 100644 --- a/routers/api/v1/repo/pull.go +++ b/routers/api/v1/repo/pull.go @@ -83,6 +83,10 @@ func ListPullRequests(ctx *context.APIContext) { // items: // type: integer // format: int64 + // - name: owner + // in: query + // description: filter by owner + // type: string // - name: page // in: query // description: page number of results to return (1-based) @@ -102,6 +106,19 @@ func ListPullRequests(ctx *context.APIContext) { ctx.Error(http.StatusInternalServerError, "PullRequests", err) return } + var ownerID int64 + if ctx.FormString("owner") != "" { + owner, err := user_model.GetUserByName(ctx, ctx.FormString("owner")) + if err != nil { + if user_model.IsErrUserNotExist(err) { + ctx.Error(http.StatusBadRequest, "Owner not found", err) + } else { + ctx.Error(http.StatusInternalServerError, "GetUserByName", err) + } + return + } + ownerID = owner.ID + } listOptions := utils.GetListOptions(ctx) prs, maxResults, err := issues_model.PullRequests(ctx, ctx.Repo.Repository.ID, &issues_model.PullRequestsOptions{ ListOptions: listOptions, @@ -109,6 +126,7 @@ func ListPullRequests(ctx *context.APIContext) { SortType: ctx.FormTrim("sort"), Labels: labelIDs, MilestoneID: ctx.FormInt64("milestone"), + OwnerID: ownerID, }) if err != nil { ctx.Error(http.StatusInternalServerError, "PullRequests", err) diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index bac918ac3899d..06d70ae123c9e 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -11264,6 +11264,12 @@ "name": "labels", "in": "query" }, + { + "type": "string", + "description": "filter by owner", + "name": "owner", + "in": "query" + }, { "type": "integer", "description": "page number of results to return (1-based)", From 6998ba41706385bf9629908c676afbc9c9e42b7c Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 7 Oct 2024 11:18:39 +0200 Subject: [PATCH 2/5] enhance swagger docs --- routers/api/v1/repo/pull.go | 26 ++++++++++++++++---------- templates/swagger/v1_json.tmpl | 21 ++++++++++++++------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go index 50c9d257df16e..9ddaf30096797 100644 --- a/routers/api/v1/repo/pull.go +++ b/routers/api/v1/repo/pull.go @@ -52,32 +52,33 @@ 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: @@ -85,21 +86,26 @@ func ListPullRequests(ctx *context.APIContext) { // format: int64 // - name: owner // in: query - // description: filter by owner + // 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 { diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 06d70ae123c9e..ad7dfe12fb698 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" }, @@ -11266,19 +11267,22 @@ }, { "type": "string", - "description": "filter by owner", + "description": "Filter by pull request author", "name": "owner", "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" } @@ -11289,6 +11293,9 @@ }, "404": { "$ref": "#/responses/notFound" + }, + "500": { + "$ref": "#/responses/error" } } }, From d6fffc8e92d9c429c61df4adf47aaeb5d35b670d Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 7 Oct 2024 20:28:36 +0200 Subject: [PATCH 3/5] rename to poster --- models/issues/pull_list.go | 6 +++--- routers/api/v1/repo/pull.go | 12 ++++++------ templates/swagger/v1_json.tmpl | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/models/issues/pull_list.go b/models/issues/pull_list.go index 8056f9e2c7fe1..9155ea0834685 100644 --- a/models/issues/pull_list.go +++ b/models/issues/pull_list.go @@ -26,7 +26,7 @@ type PullRequestsOptions struct { SortType string Labels []int64 MilestoneID int64 - OwnerID int64 + PosterID int64 } func listPullRequestStatement(ctx context.Context, baseRepoID int64, opts *PullRequestsOptions) *xorm.Session { @@ -47,8 +47,8 @@ func listPullRequestStatement(ctx context.Context, baseRepoID int64, opts *PullR sess.And("issue.milestone_id=?", opts.MilestoneID) } - if opts.OwnerID > 0 { - sess.And("issue.owner_id=?", opts.OwnerID) + 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 9ddaf30096797..466189eec50c6 100644 --- a/routers/api/v1/repo/pull.go +++ b/routers/api/v1/repo/pull.go @@ -84,7 +84,7 @@ func ListPullRequests(ctx *context.APIContext) { // items: // type: integer // format: int64 - // - name: owner + // - name: poster // in: query // description: Filter by pull request author // type: string @@ -112,18 +112,18 @@ func ListPullRequests(ctx *context.APIContext) { ctx.Error(http.StatusInternalServerError, "PullRequests", err) return } - var ownerID int64 + var posterID int64 if ctx.FormString("owner") != "" { - owner, err := user_model.GetUserByName(ctx, ctx.FormString("owner")) + poster, err := user_model.GetUserByName(ctx, ctx.FormString("poster")) if err != nil { if user_model.IsErrUserNotExist(err) { - ctx.Error(http.StatusBadRequest, "Owner not found", err) + ctx.Error(http.StatusBadRequest, "Poster not found", err) } else { ctx.Error(http.StatusInternalServerError, "GetUserByName", err) } return } - ownerID = owner.ID + posterID = poster.ID } listOptions := utils.GetListOptions(ctx) prs, maxResults, err := issues_model.PullRequests(ctx, ctx.Repo.Repository.ID, &issues_model.PullRequestsOptions{ @@ -132,7 +132,7 @@ func ListPullRequests(ctx *context.APIContext) { SortType: ctx.FormTrim("sort"), Labels: labelIDs, MilestoneID: ctx.FormInt64("milestone"), - OwnerID: ownerID, + 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 ad7dfe12fb698..2cbd8782d8410 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -11268,7 +11268,7 @@ { "type": "string", "description": "Filter by pull request author", - "name": "owner", + "name": "poster", "in": "query" }, { From 8bf5f0ee2c3e12593569d7c8d5b6ac5b439a362f Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 7 Oct 2024 20:29:35 +0200 Subject: [PATCH 4/5] Update routers/api/v1/repo/pull.go --- routers/api/v1/repo/pull.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go index 466189eec50c6..dcf14f935c581 100644 --- a/routers/api/v1/repo/pull.go +++ b/routers/api/v1/repo/pull.go @@ -113,7 +113,7 @@ func ListPullRequests(ctx *context.APIContext) { return } var posterID int64 - if ctx.FormString("owner") != "" { + if ctx.FormString("poster") != "" { poster, err := user_model.GetUserByName(ctx, ctx.FormString("poster")) if err != nil { if user_model.IsErrUserNotExist(err) { From 39217cd5b071edd2150c92da781f632bf1788d72 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Mon, 7 Oct 2024 20:30:28 +0200 Subject: [PATCH 5/5] refactor --- routers/api/v1/repo/pull.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routers/api/v1/repo/pull.go b/routers/api/v1/repo/pull.go index dcf14f935c581..34ebcb42d5aef 100644 --- a/routers/api/v1/repo/pull.go +++ b/routers/api/v1/repo/pull.go @@ -113,8 +113,8 @@ func ListPullRequests(ctx *context.APIContext) { return } var posterID int64 - if ctx.FormString("poster") != "" { - poster, err := user_model.GetUserByName(ctx, ctx.FormString("poster")) + 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)