From bec69f702ba8ecdc9a77db34ff94b7e55879be59 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 11 Apr 2018 10:51:44 +0800 Subject: Add topic support (#3711) * add topic models and unit tests * fix comments * fix comment * add the UI to show or add topics for a repo * show topics on repositories list * fix test * don't show manage topics link when no permission * use green basic as topic label * fix topic label color * remove trace content * remove debug function --- routers/api/v1/api.go | 4 ++++ routers/api/v1/repo/repo.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) (limited to 'routers/api/v1') 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, + }) +} -- cgit v1.2.3