Преглед изворни кода

goctl生成Kotlin代码优化 (#16)

* 修复Kotlin连接失败抛出Exception;添加Kotlin连接超时

* 修复路径参数导致生成的Kotlin函数名带有:问题

* Added HTTP Patch Method

* kotlin-add-patch-support

* format-imports
Steven Zack пре 4 година
родитељ
комит
1252bd9cde
3 измењених фајлова са 27 додато и 19 уклоњено
  1. 1 0
      tools/goctl/api/gogen/genroutes.go
  2. 9 8
      tools/goctl/api/ktgen/funcs.go
  3. 17 11
      tools/goctl/api/ktgen/gen.go

+ 1 - 0
tools/goctl/api/gogen/genroutes.go

@@ -43,6 +43,7 @@ var mapping = map[string]string{
 	"head":   "http.MethodHead",
 	"post":   "http.MethodPost",
 	"put":    "http.MethodPut",
+	"patch":  "http.MethodPatch",
 }
 
 type (

+ 9 - 8
tools/goctl/api/ktgen/funcs.go

@@ -5,15 +5,16 @@ import (
 	"strings"
 	"text/template"
 
+	"github.com/iancoleman/strcase"
 	"github.com/tal-tech/go-zero/tools/goctl/api/util"
 )
 
 var funcsMap = template.FuncMap{
-	"lowCamelCase":   lowCamelCase,
-	"pathToFuncName": pathToFuncName,
-	"parseType":      parseType,
-	"add":            add,
-	"upperCase":      upperCase,
+	"lowCamelCase":    lowCamelCase,
+	"routeToFuncName": routeToFuncName,
+	"parseType":       parseType,
+	"add":             add,
+	"upperCase":       upperCase,
 }
 
 func lowCamelCase(s string) string {
@@ -24,16 +25,16 @@ func lowCamelCase(s string) string {
 	return util.ToLower(s[:1]) + s[1:]
 }
 
-func pathToFuncName(path string) string {
+func routeToFuncName(method, path string) string {
 	if !strings.HasPrefix(path, "/") {
 		path = "/" + path
 	}
 
 	path = strings.ReplaceAll(path, "/", "_")
 	path = strings.ReplaceAll(path, "-", "_")
+	path = strings.ReplaceAll(path, ":", "With_")
 
-	camel := util.ToCamelCase(path)
-	return util.ToLower(camel[:1]) + camel[1:]
+	return strings.ToLower(method)+strcase.ToCamel(path)
 }
 
 func parseType(t string) string {

+ 17 - 11
tools/goctl/api/ktgen/gen.go

@@ -34,9 +34,10 @@ suspend fun apiRequest(
 ) = withContext(Dispatchers.IO) {
     val url = URL(SERVER + uri)
     with(url.openConnection() as HttpURLConnection) {
+        connectTimeout = 3000
         requestMethod = method
         doInput = true
-        if (method == "POST" || method == "PUT") {
+        if (method == "POST" || method == "PUT" || method == "PATCH") {
             setRequestProperty("Content-Type", "application/json")
             doOutput = true
             val data = when (body) {
@@ -51,17 +52,22 @@ suspend fun apiRequest(
             wr.write(data)
             wr.flush()
         }
-        if (responseCode >= 400) {
-            BufferedReader(InputStreamReader(errorStream)).use {
+
+         try {
+            if (responseCode >= 400) {
+                BufferedReader(InputStreamReader(errorStream)).use {
+                    val response = it.readText()
+                    onFail?.invoke(response)
+                }
+                return@with
+            }
+            //response
+            BufferedReader(InputStreamReader(inputStream)).use {
                 val response = it.readText()
-                onFail?.invoke(response)
+                onOk?.invoke(response)
             }
-            return@with
-        }
-        //response
-        BufferedReader(InputStreamReader(inputStream)).use {
-            val response = it.readText()
-            onOk?.invoke(response)
+        } catch (e: Exception) {
+            e.message?.let { onFail?.invoke(it) }
         }
     }
     eventually?.invoke()
@@ -77,7 +83,7 @@ object {{with .Info}}{{.Title}}{{end}}{
 		val {{with $item}}{{lowCamelCase .Name}}: {{parseType .Type}}{{end}}{{if ne $i (add $length -1)}},{{end}}{{end}}
 	){{end}}
 	{{with .Service}}
-	{{range .Routes}}suspend fun {{pathToFuncName .Path}}({{with .RequestType}}{{if ne .Name ""}}
+	{{range .Routes}}suspend fun {{routeToFuncName .Method .Path}}({{with .RequestType}}{{if ne .Name ""}}
 		req:{{.Name}},{{end}}{{end}}
 		onOk: (({{with .ResponseType}}{{.Name}}{{end}}) -> Unit)? = null,
         onFail: ((String) -> Unit)? = null,