From fc2f2c7602c0bea8de76172f6d3303eab374a01e Mon Sep 17 00:00:00 2001
From: 6543 <6543@obermui.de>
Date: Mon, 22 Jun 2020 20:21:31 +0200
Subject: [PATCH] API: Move AllowedReactions endpoint into GetGenneralUI
 endpoint + creat new swagger section settings (#11854)

* move Setting function into its own package

* swagger add&use new section "settings"

* move api AllowedReactions into general UI-Settings endpoint

* prepare TEST

* lint
---
 integrations/api_issue_reaction_test.go       | 10 ++--
 modules/structs/settings.go                   |  5 ++
 routers/api/v1/api.go                         |  5 +-
 routers/api/v1/{misc => settings}/settings.go | 18 +++---
 routers/api/v1/swagger/misc.go                |  7 ---
 routers/api/v1/swagger/settings.go            | 21 +++++++
 templates/swagger/v1_json.tmpl                | 56 +++++++++++++------
 7 files changed, 81 insertions(+), 41 deletions(-)
 rename routers/api/v1/{misc => settings}/settings.go (64%)
 create mode 100644 routers/api/v1/swagger/settings.go

diff --git a/integrations/api_issue_reaction_test.go b/integrations/api_issue_reaction_test.go
index ab3de7c116..abbc6429fb 100644
--- a/integrations/api_issue_reaction_test.go
+++ b/integrations/api_issue_reaction_test.go
@@ -20,16 +20,14 @@ import (
 func TestAPIAllowedReactions(t *testing.T) {
 	defer prepareTestEnv(t)()
 
-	type allowed []string
+	a := new(api.GeneralUISettings)
 
-	a := new(allowed)
-
-	req := NewRequest(t, "GET", "/api/v1/settings/allowed_reactions")
+	req := NewRequest(t, "GET", "/api/v1/settings/ui")
 	resp := MakeRequest(t, req, http.StatusOK)
 
 	DecodeJSON(t, resp, &a)
-	assert.Len(t, *a, len(setting.UI.Reactions))
-	assert.ElementsMatch(t, setting.UI.Reactions, *a)
+	assert.Len(t, a.AllowedReactions, len(setting.UI.Reactions))
+	assert.ElementsMatch(t, setting.UI.Reactions, a.AllowedReactions)
 }
 
 func TestAPIIssuesReactions(t *testing.T) {
diff --git a/modules/structs/settings.go b/modules/structs/settings.go
index dcd1b5cabd..4a6e0ce5a8 100644
--- a/modules/structs/settings.go
+++ b/modules/structs/settings.go
@@ -9,3 +9,8 @@ type GeneralRepoSettings struct {
 	MirrorsDisabled bool `json:"mirrors_disabled"`
 	HTTPGitDisabled bool `json:"http_git_disabled"`
 }
+
+// GeneralUISettings contains global ui settings exposed by API
+type GeneralUISettings struct {
+	AllowedReactions []string `json:"allowed_reactions"`
+}
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index f356d7a2bc..b03f547a6b 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -73,6 +73,7 @@ import (
 	"code.gitea.io/gitea/routers/api/v1/notify"
 	"code.gitea.io/gitea/routers/api/v1/org"
 	"code.gitea.io/gitea/routers/api/v1/repo"
+	"code.gitea.io/gitea/routers/api/v1/settings"
 	_ "code.gitea.io/gitea/routers/api/v1/swagger" // for swagger generation
 	"code.gitea.io/gitea/routers/api/v1/user"
 
@@ -513,8 +514,8 @@ func RegisterRoutes(m *macaron.Macaron) {
 		m.Post("/markdown", bind(api.MarkdownOption{}), misc.Markdown)
 		m.Post("/markdown/raw", misc.MarkdownRaw)
 		m.Group("/settings", func() {
-			m.Get("/allowed_reactions", misc.SettingGetsAllowedReactions)
-			m.Get("/repository", misc.GetGeneralRepoSettings)
+			m.Get("/ui", settings.GetGeneralUISettings)
+			m.Get("/repository", settings.GetGeneralRepoSettings)
 		})
 
 		// Notifications
diff --git a/routers/api/v1/misc/settings.go b/routers/api/v1/settings/settings.go
similarity index 64%
rename from routers/api/v1/misc/settings.go
rename to routers/api/v1/settings/settings.go
index 925cde835c..8403a51d3e 100644
--- a/routers/api/v1/misc/settings.go
+++ b/routers/api/v1/settings/settings.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a MIT-style
 // license that can be found in the LICENSE file.
 
-package misc
+package settings
 
 import (
 	"net/http"
@@ -12,22 +12,24 @@ import (
 	api "code.gitea.io/gitea/modules/structs"
 )
 
-// SettingGetsAllowedReactions return allowed reactions
-func SettingGetsAllowedReactions(ctx *context.APIContext) {
-	// swagger:operation GET /settings/allowed_reactions miscellaneous getAllowedReactions
+// GetGeneralUISettings returns instance's global settings for ui
+func GetGeneralUISettings(ctx *context.APIContext) {
+	// swagger:operation GET /settings/ui settings getGeneralUISettings
 	// ---
-	// summary: Returns string array of allowed reactions
+	// summary: Get instance's global settings for ui
 	// produces:
 	// - application/json
 	// responses:
 	//   "200":
-	//     "$ref": "#/responses/StringSlice"
-	ctx.JSON(http.StatusOK, setting.UI.Reactions)
+	//     "$ref": "#/responses/GeneralUISettings"
+	ctx.JSON(http.StatusOK, api.GeneralUISettings{
+		AllowedReactions: setting.UI.Reactions,
+	})
 }
 
 // GetGeneralRepoSettings returns instance's global settings for repositories
 func GetGeneralRepoSettings(ctx *context.APIContext) {
-	// swagger:operation GET /settings/repository miscellaneous getGeneralRepositorySettings
+	// swagger:operation GET /settings/repository settings getGeneralRepositorySettings
 	// ---
 	// summary: Get instance's global settings for repositories
 	// produces:
diff --git a/routers/api/v1/swagger/misc.go b/routers/api/v1/swagger/misc.go
index 50f5cbdbf5..1d3c257efa 100644
--- a/routers/api/v1/swagger/misc.go
+++ b/routers/api/v1/swagger/misc.go
@@ -21,10 +21,3 @@ type swaggerResponseStringSlice struct {
 	// in:body
 	Body []string `json:"body"`
 }
-
-// GeneralRepoSettings
-// swagger:response GeneralRepoSettings
-type swaggerResponseGeneralRepoSettings struct {
-	// in:body
-	Body api.GeneralRepoSettings `json:"body"`
-}
diff --git a/routers/api/v1/swagger/settings.go b/routers/api/v1/swagger/settings.go
new file mode 100644
index 0000000000..45266e51df
--- /dev/null
+++ b/routers/api/v1/swagger/settings.go
@@ -0,0 +1,21 @@
+// Copyright 2020 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 swagger
+
+import api "code.gitea.io/gitea/modules/structs"
+
+// GeneralRepoSettings
+// swagger:response GeneralRepoSettings
+type swaggerResponseGeneralRepoSettings struct {
+	// in:body
+	Body api.GeneralRepoSettings `json:"body"`
+}
+
+// GeneralUISettings
+// swagger:response GeneralUISettings
+type swaggerResponseGeneralUISettings struct {
+	// in:body
+	Body api.GeneralUISettings `json:"body"`
+}
diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl
index 34a4b42f2f..1226822cc8 100644
--- a/templates/swagger/v1_json.tmpl
+++ b/templates/swagger/v1_json.tmpl
@@ -8470,30 +8470,13 @@
         }
       }
     },
-    "/settings/allowed_reactions": {
-      "get": {
-        "produces": [
-          "application/json"
-        ],
-        "tags": [
-          "miscellaneous"
-        ],
-        "summary": "Returns string array of allowed reactions",
-        "operationId": "getAllowedReactions",
-        "responses": {
-          "200": {
-            "$ref": "#/responses/StringSlice"
-          }
-        }
-      }
-    },
     "/settings/repository": {
       "get": {
         "produces": [
           "application/json"
         ],
         "tags": [
-          "miscellaneous"
+          "settings"
         ],
         "summary": "Get instance's global settings for repositories",
         "operationId": "getGeneralRepositorySettings",
@@ -8504,6 +8487,23 @@
         }
       }
     },
+    "/settings/ui": {
+      "get": {
+        "produces": [
+          "application/json"
+        ],
+        "tags": [
+          "settings"
+        ],
+        "summary": "Get instance's global settings for ui",
+        "operationId": "getGeneralUISettings",
+        "responses": {
+          "200": {
+            "$ref": "#/responses/GeneralUISettings"
+          }
+        }
+      }
+    },
     "/signing-key.gpg": {
       "get": {
         "produces": [
@@ -12753,6 +12753,20 @@
       },
       "x-go-package": "code.gitea.io/gitea/modules/structs"
     },
+    "GeneralUISettings": {
+      "description": "GeneralUISettings contains global ui settings exposed by API",
+      "type": "object",
+      "properties": {
+        "allowed_reactions": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "x-go-name": "AllowedReactions"
+        }
+      },
+      "x-go-package": "code.gitea.io/gitea/modules/structs"
+    },
     "GitBlobResponse": {
       "description": "GitBlobResponse represents a git blob",
       "type": "object",
@@ -14928,6 +14942,12 @@
         "$ref": "#/definitions/GeneralRepoSettings"
       }
     },
+    "GeneralUISettings": {
+      "description": "GeneralUISettings",
+      "schema": {
+        "$ref": "#/definitions/GeneralUISettings"
+      }
+    },
     "GitBlobResponse": {
       "description": "GitBlobResponse",
       "schema": {