summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
Diffstat (limited to 'routers')
-rw-r--r--routers/api/v1/api.go4
-rw-r--r--routers/api/v1/repo/repo.go42
-rw-r--r--routers/repo/topic.go38
-rw-r--r--routers/repo/view.go10
-rw-r--r--routers/routes/routes.go4
5 files changed, 98 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,
+ })
+}
diff --git a/routers/repo/topic.go b/routers/repo/topic.go
new file mode 100644
index 0000000000..90ef0d189c
--- /dev/null
+++ b/routers/repo/topic.go
@@ -0,0 +1,38 @@
+// Copyright 2018 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package repo
+
+import (
+ "strings"
+
+ "code.gitea.io/gitea/models"
+ "code.gitea.io/gitea/modules/context"
+ "code.gitea.io/gitea/modules/log"
+)
+
+// TopicPost response for creating repository
+func TopicPost(ctx *context.Context) {
+ if ctx.User == nil {
+ ctx.JSON(403, map[string]interface{}{
+ "message": "Only owners could change the topics.",
+ })
+ return
+ }
+
+ topics := strings.Split(ctx.Query("topics"), ",")
+
+ err := models.SaveTopics(ctx.Repo.Repository.ID, topics...)
+ if err != nil {
+ log.Error(2, "SaveTopics failed: %v", err)
+ ctx.JSON(500, map[string]interface{}{
+ "message": "Save topics failed.",
+ })
+ return
+ }
+
+ ctx.JSON(200, map[string]interface{}{
+ "status": "ok",
+ })
+}
diff --git a/routers/repo/view.go b/routers/repo/view.go
index 685dd411d6..ca2ece648f 100644
--- a/routers/repo/view.go
+++ b/routers/repo/view.go
@@ -314,6 +314,16 @@ func renderCode(ctx *context.Context) {
treeLink += "/" + ctx.Repo.TreePath
}
+ // Get Topics of this repo
+ topics, err := models.FindTopics(&models.FindTopicOptions{
+ RepoID: ctx.Repo.Repository.ID,
+ })
+ if err != nil {
+ ctx.ServerError("models.FindTopics", err)
+ return
+ }
+ ctx.Data["Topics"] = topics
+
// Get current entry user currently looking at.
entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx.Repo.TreePath)
if err != nil {
diff --git a/routers/routes/routes.go b/routers/routes/routes.go
index da7157080a..47a0854e19 100644
--- a/routers/routes/routes.go
+++ b/routers/routes/routes.go
@@ -588,6 +588,10 @@ func RegisterRoutes(m *macaron.Macaron) {
}, context.RepoAssignment(), context.UnitTypes(), context.LoadRepoUnits(), context.CheckUnit(models.UnitTypeReleases))
m.Group("/:username/:reponame", func() {
+ m.Post("/topics", repo.TopicPost)
+ }, context.RepoAssignment(), reqRepoAdmin)
+
+ m.Group("/:username/:reponame", func() {
m.Group("", func() {
m.Get("/^:type(issues|pulls)$", repo.RetrieveLabels, repo.Issues)
m.Get("/^:type(issues|pulls)$/:index", repo.ViewIssue)