From f5f873c6bd7cb0eef2842f501057e442ef4e4b32 Mon Sep 17 00:00:00 2001 From: Keson Date: Fri, 23 Oct 2020 16:10:33 +0800 Subject: [PATCH] api handler generate incompletely while has no request (#158) * fix: api handler generate incompletely while has no request * fix: api handler generate incompletely while has no request * add handler generate test --- tools/goctl/api/gogen/gen_test.go | 22 ++++++++++++++++++++++ tools/goctl/api/gogen/genhandlers.go | 8 +++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/tools/goctl/api/gogen/gen_test.go b/tools/goctl/api/gogen/gen_test.go index 5ba5c3e11f9c..4241e117f606 100644 --- a/tools/goctl/api/gogen/gen_test.go +++ b/tools/goctl/api/gogen/gen_test.go @@ -178,6 +178,13 @@ service A-api { } ` +const apiHasNoRequest = ` +service A-api { + @handler GreetHandler + post /greet/ping () +} +` + func TestParser(t *testing.T) { filename := "greet.api" err := ioutil.WriteFile(filename, []byte(testApiTemplate), os.ModePerm) @@ -311,6 +318,21 @@ func TestApiHasJwtAndMiddleware(t *testing.T) { validate(t, filename) } +func TestApiHasNoRequestBody(t *testing.T) { + filename := "greet.api" + err := ioutil.WriteFile(filename, []byte(apiHasNoRequest), os.ModePerm) + assert.Nil(t, err) + defer os.Remove(filename) + + parser, err := parser.NewParser(filename) + assert.Nil(t, err) + + _, err = parser.Parse() + assert.Nil(t, err) + + validate(t, filename) +} + func validate(t *testing.T, api string) { dir := "_go" err := DoGenProject(api, dir, true) diff --git a/tools/goctl/api/gogen/genhandlers.go b/tools/goctl/api/gogen/genhandlers.go index 5c7802fc07ed..34a7649e4f2e 100644 --- a/tools/goctl/api/gogen/genhandlers.go +++ b/tools/goctl/api/gogen/genhandlers.go @@ -23,14 +23,14 @@ import ( func {{.HandlerName}}(ctx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req types.{{.RequestType}} + {{if .HasRequest}}var req types.{{.RequestType}} if err := httpx.Parse(r, &req); err != nil { httpx.Error(w, err) return - } + }{{end}} l := logic.New{{.LogicType}}(r.Context(), ctx) - {{if .HasResp}}resp, {{end}}err := l.{{.Call}}(req) + {{if .HasResp}}resp, {{end}}err := l.{{.Call}}({{if .HasRequest}}req{{end}}) if err != nil { httpx.Error(w, err) } else { @@ -47,6 +47,7 @@ type Handler struct { LogicType string Call string HasResp bool + HasRequest bool } func genHandler(dir string, group spec.Group, route spec.Route) error { @@ -71,6 +72,7 @@ func genHandler(dir string, group spec.Group, route spec.Route) error { LogicType: strings.TrimSuffix(strings.Title(handler), "Handler") + "Logic", Call: strings.Title(strings.TrimSuffix(handler, "Handler")), HasResp: len(route.ResponseType.Name) > 0, + HasRequest: len(route.RequestType.Name) > 0, }) }