summaryrefslogtreecommitdiffstats
path: root/routers/api
diff options
context:
space:
mode:
Diffstat (limited to 'routers/api')
-rw-r--r--routers/api/v1/api.go4
-rw-r--r--routers/api/v1/repo/repo.go42
2 files changed, 46 insertions, 0 deletions
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index 4c454cb6a0..02606bdfd0 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -571,5 +571,9 @@ func RegisterRoutes(m *macaron.Macaron) {
})
})
}, reqAdmin())
+
+ m.Group("/topics", func() {
+ m.Get("/search", repo.TopicSearch)
+ })
}, context.APIContexter())
}
diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go
index 25ed62fa49..9f64dda61d 100644
--- a/routers/api/v1/repo/repo.go
+++ b/routers/api/v1/repo/repo.go
@@ -501,3 +501,45 @@ func MirrorSync(ctx *context.APIContext) {
go models.MirrorQueue.Add(repo.ID)
ctx.Status(200)
}
+
+// TopicSearch search for creating topic
+func TopicSearch(ctx *context.Context) {
+ // swagger:operation GET /topics/search repository topicSearch
+ // ---
+ // summary: search topics via keyword
+ // produces:
+ // - application/json
+ // parameters:
+ // - name: keyword
+ // in: path
+ // description: id of the repo to get
+ // type: integer
+ // required: true
+ // responses:
+ // "200":
+ // "$ref": "#/responses/Repository"
+ if ctx.User == nil {
+ ctx.JSON(403, map[string]interface{}{
+ "message": "Only owners could change the topics.",
+ })
+ return
+ }
+
+ kw := ctx.Query("q")
+
+ topics, err := models.FindTopics(&models.FindTopicOptions{
+ Keyword: kw,
+ Limit: 10,
+ })
+ if err != nil {
+ log.Error(2, "SearchTopics failed: %v", err)
+ ctx.JSON(500, map[string]interface{}{
+ "message": "Search topics failed.",
+ })
+ return
+ }
+
+ ctx.JSON(200, map[string]interface{}{
+ "topics": topics,
+ })
+}