Skip to content

Commit 1a83581

Browse files
kolaentelafriks
authored andcommittedMar 7, 2018
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
1 parent d71f510 commit 1a83581

File tree

2 files changed

+35
-6
lines changed

2 files changed

+35
-6
lines changed
 

‎public/swagger.v1.json

+6
Original file line numberDiff line numberDiff line change
@@ -1830,6 +1830,12 @@
18301830
"description": "page number of requested issues",
18311831
"name": "page",
18321832
"in": "query"
1833+
},
1834+
{
1835+
"type": "string",
1836+
"description": "search string",
1837+
"name": "q",
1838+
"in": "query"
18331839
}
18341840
],
18351841
"responses": {

‎routers/api/v1/repo/issue.go

+29-6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"code.gitea.io/gitea/models"
1414
"code.gitea.io/gitea/modules/context"
15+
"code.gitea.io/gitea/modules/indexer"
1516
"code.gitea.io/gitea/modules/setting"
1617
"code.gitea.io/gitea/modules/util"
1718
)
@@ -42,6 +43,10 @@ func ListIssues(ctx *context.APIContext) {
4243
// in: query
4344
// description: page number of requested issues
4445
// type: integer
46+
// - name: q
47+
// in: query
48+
// description: search string
49+
// type: string
4550
// responses:
4651
// "200":
4752
// "$ref": "#/responses/IssueList"
@@ -55,12 +60,30 @@ func ListIssues(ctx *context.APIContext) {
5560
isClosed = util.OptionalBoolFalse
5661
}
5762

58-
issues, err := models.Issues(&models.IssuesOptions{
59-
RepoIDs: []int64{ctx.Repo.Repository.ID},
60-
Page: ctx.QueryInt("page"),
61-
PageSize: setting.UI.IssuePagingNum,
62-
IsClosed: isClosed,
63-
})
63+
var issues []*models.Issue
64+
65+
keyword := strings.Trim(ctx.Query("q"), " ")
66+
if strings.IndexByte(keyword, 0) >= 0 {
67+
keyword = ""
68+
}
69+
var issueIDs []int64
70+
var err error
71+
if len(keyword) > 0 {
72+
issueIDs, err = indexer.SearchIssuesByKeyword(ctx.Repo.Repository.ID, keyword)
73+
}
74+
75+
// Only fetch the issues if we either don't have a keyword or the search returned issues
76+
// This would otherwise return all issues if no issues were found by the search.
77+
if len(keyword) == 0 || len(issueIDs) > 0 {
78+
issues, err = models.Issues(&models.IssuesOptions{
79+
RepoIDs: []int64{ctx.Repo.Repository.ID},
80+
Page: ctx.QueryInt("page"),
81+
PageSize: setting.UI.IssuePagingNum,
82+
IsClosed: isClosed,
83+
IssueIDs: issueIDs,
84+
})
85+
}
86+
6487
if err != nil {
6588
ctx.Error(500, "Issues", err)
6689
return

0 commit comments

Comments
 (0)