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
This commit is contained in:
kolaente 2018-03-07 11:00:56 +01:00 committed by Lauris BH
parent d71f510c62
commit 1a83581121
2 changed files with 35 additions and 6 deletions

@ -1830,6 +1830,12 @@
"description": "page number of requested issues", "description": "page number of requested issues",
"name": "page", "name": "page",
"in": "query" "in": "query"
},
{
"type": "string",
"description": "search string",
"name": "q",
"in": "query"
} }
], ],
"responses": { "responses": {

@ -12,6 +12,7 @@ import (
"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/indexer"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
) )
@ -42,6 +43,10 @@ func ListIssues(ctx *context.APIContext) {
// in: query // in: query
// description: page number of requested issues // description: page number of requested issues
// type: integer // type: integer
// - name: q
// in: query
// description: search string
// type: string
// responses: // responses:
// "200": // "200":
// "$ref": "#/responses/IssueList" // "$ref": "#/responses/IssueList"
@ -55,12 +60,30 @@ func ListIssues(ctx *context.APIContext) {
isClosed = util.OptionalBoolFalse isClosed = util.OptionalBoolFalse
} }
issues, err := models.Issues(&models.IssuesOptions{ var issues []*models.Issue
RepoIDs: []int64{ctx.Repo.Repository.ID},
Page: ctx.QueryInt("page"), keyword := strings.Trim(ctx.Query("q"), " ")
PageSize: setting.UI.IssuePagingNum, if strings.IndexByte(keyword, 0) >= 0 {
IsClosed: isClosed, 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 { if err != nil {
ctx.Error(500, "Issues", err) ctx.Error(500, "Issues", err)
return return