diff options
author | kolaente <konrad@kola-entertainments.de> | 2018-03-07 11:00:56 +0100 |
---|---|---|
committer | Lauris BH <lauris@nix.lv> | 2018-03-07 12:00:56 +0200 |
commit | 1a83581121a80c8deb8160e2d04905ab71768be3 (patch) | |
tree | 1eb029aea9f5fec59d359225c058feacc33b2134 | |
parent | d71f510c6240502ba37955d8e89b987cad1edb65 (diff) | |
download | gitea-1a83581121a80c8deb8160e2d04905ab71768be3.tar.gz gitea-1a83581121a80c8deb8160e2d04905ab71768be3.zip |
Added issue search via api (#3612)
* Started implementing issue api search
* Implemented issue search via api
* Added search to swagger.json
* Removed todo
* fmt
* Added comment to generate swagger json via "generate-swagger"
* Simplified search
* fmt
* Removed unessecary comment
* Removed unessecary declaration of the issues-variable
* Removed unessecary comment
* Removed unessecary comment
* Added explanation keyword
* Simplified check for empty keyword
* corrected check if keyword is empty
-rw-r--r-- | public/swagger.v1.json | 6 | ||||
-rw-r--r-- | routers/api/v1/repo/issue.go | 35 |
2 files changed, 35 insertions, 6 deletions
diff --git a/public/swagger.v1.json b/public/swagger.v1.json index ad1b91ad81..5c3c21532f 100644 --- a/public/swagger.v1.json +++ b/public/swagger.v1.json @@ -1830,6 +1830,12 @@ "description": "page number of requested issues", "name": "page", "in": "query" + }, + { + "type": "string", + "description": "search string", + "name": "q", + "in": "query" } ], "responses": { diff --git a/routers/api/v1/repo/issue.go b/routers/api/v1/repo/issue.go index 8507e65efa..04b0dec0e0 100644 --- a/routers/api/v1/repo/issue.go +++ b/routers/api/v1/repo/issue.go @@ -12,6 +12,7 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/indexer" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" ) @@ -42,6 +43,10 @@ func ListIssues(ctx *context.APIContext) { // in: query // description: page number of requested issues // type: integer + // - name: q + // in: query + // description: search string + // type: string // responses: // "200": // "$ref": "#/responses/IssueList" @@ -55,12 +60,30 @@ func ListIssues(ctx *context.APIContext) { isClosed = util.OptionalBoolFalse } - issues, err := models.Issues(&models.IssuesOptions{ - RepoIDs: []int64{ctx.Repo.Repository.ID}, - Page: ctx.QueryInt("page"), - PageSize: setting.UI.IssuePagingNum, - IsClosed: isClosed, - }) + var issues []*models.Issue + + keyword := strings.Trim(ctx.Query("q"), " ") + if strings.IndexByte(keyword, 0) >= 0 { + keyword = "" + } + var issueIDs []int64 + var err error + if len(keyword) > 0 { + issueIDs, err = indexer.SearchIssuesByKeyword(ctx.Repo.Repository.ID, keyword) + } + + // Only fetch the issues if we either don't have a keyword or the search returned issues + // This would otherwise return all issues if no issues were found by the search. + if len(keyword) == 0 || len(issueIDs) > 0 { + issues, err = models.Issues(&models.IssuesOptions{ + RepoIDs: []int64{ctx.Repo.Repository.ID}, + Page: ctx.QueryInt("page"), + PageSize: setting.UI.IssuePagingNum, + IsClosed: isClosed, + IssueIDs: issueIDs, + }) + } + if err != nil { ctx.Error(500, "Issues", err) return |