From 742b8bd6506077bad596d333ff22c5cf5cb22dfb Mon Sep 17 00:00:00 2001 From: debugman Date: Thu, 6 Aug 2020 17:17:07 +0800 Subject: [PATCH] added int32 support for go-server (#7123) --- .../go-server/controller-api.mustache | 33 ++++++++++++++----- .../main/resources/go-server/routers.mustache | 13 ++++++-- .../server/petstore/go-api-server/README.md | 1 + .../petstore/go-api-server/go/api_pet.go | 12 +++---- .../petstore/go-api-server/go/api_store.go | 3 +- .../petstore/go-api-server/go/routers.go | 13 ++++++-- 6 files changed, 53 insertions(+), 22 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache b/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache index 710c4088fd6..e6108772f3b 100644 --- a/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/controller-api.mustache @@ -41,32 +41,49 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{/hasFormParams}}{{#hasPathParams}} params := mux.Vars(r){{/hasPathParams}}{{#hasQueryParams}} query := r.URL.Query(){{/hasQueryParams}}{{#allParams}}{{#isPathParam}}{{#isLong}} - {{paramName}}, err := parseIntParameter(params["{{paramName}}"]) + {{paramName}}, err := parseInt64Parameter(params["{{paramName}}"]) + if err != nil { + w.WriteHeader(500) + return + }{{/isLong}}{{#isInteger}} + {{paramName}}, err := parseInt32Parameter(params["{{paramName}}"]) if err != nil { w.WriteHeader(500) return } - {{/isLong}}{{^isLong}} - {{paramName}} := params["{{paramName}}"]{{/isLong}}{{/isPathParam}}{{#isQueryParam}}{{#isLong}} - {{paramName}}, err := parseIntParameter(query.Get("{{paramName}}")) + {{/isInteger}}{{^isLong}}{{^isInteger}} + {{paramName}} := params["{{paramName}}"]{{/isInteger}}{{/isLong}}{{/isPathParam}}{{#isQueryParam}}{{#isLong}} + {{paramName}}, err := parseInt64Parameter(query.Get("{{paramName}}")) if err != nil { w.WriteHeader(500) return } - {{/isLong}}{{^isLong}} - {{paramName}} := {{#isListContainer}}strings.Split({{/isListContainer}}query.Get("{{paramName}}"){{#isListContainer}}, ","){{/isListContainer}}{{/isLong}}{{/isQueryParam}}{{#isFormParam}}{{#isFile}} + {{/isLong}}{{#isInteger}} + {{paramName}}, err := parseInt32Parameter(query.Get("{{paramName}}")) + if err != nil { + w.WriteHeader(500) + return + } + {{/isInteger}}{{^isLong}}{{^isInteger}} + {{paramName}} := {{#isListContainer}}strings.Split({{/isListContainer}}query.Get("{{paramName}}"){{#isListContainer}}, ","){{/isListContainer}}{{/isInteger}}{{/isLong}}{{/isQueryParam}}{{#isFormParam}}{{#isFile}} {{paramName}}, err := ReadFormFileToTempFile(r, "{{paramName}}") if err != nil { w.WriteHeader(500) return } {{/isFile}}{{#isLong}} - {{paramName}}, err := parseIntParameter( r.FormValue("{{paramName}}")) + {{paramName}}, err := parseInt64Parameter( r.FormValue("{{paramName}}")) if err != nil { w.WriteHeader(500) return } - {{/isLong}}{{^isFile}}{{^isLong}} + {{/isLong}}{{#isInteger}} + {{paramName}}, err := parseInt32Parameter( r.FormValue("{{paramName}}")) + if err != nil { + w.WriteHeader(500) + return + } + {{/isInteger}}{{^isFile}}{{^isLong}} {{paramName}} := r.FormValue("{{paramName}}"){{/isLong}}{{/isFile}}{{/isFormParam}}{{#isHeaderParam}} {{paramName}} := r.Header.Get("{{paramName}}"){{/isHeaderParam}}{{#isBodyParam}} {{paramName}} := &{{dataType}}{} diff --git a/modules/openapi-generator/src/main/resources/go-server/routers.mustache b/modules/openapi-generator/src/main/resources/go-server/routers.mustache index c1b4215376e..f89bae068c8 100644 --- a/modules/openapi-generator/src/main/resources/go-server/routers.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/routers.mustache @@ -88,7 +88,16 @@ func ReadFormFileToTempFile(r *http.Request, key string) (*os.File, error) { return file, nil } -// parseIntParameter parses a sting parameter to an int64 -func parseIntParameter(param string) (int64, error) { +// parseInt64Parameter parses a sting parameter to an int64 +func parseInt64Parameter(param string) (int64, error) { return strconv.ParseInt(param, 10, 64) } + +// parseInt32Parameter parses a sting parameter to an int32 +func parseInt32Parameter(param string) (int32, error) { + val, err := strconv.ParseInt(param, 10, 32) + if err != nil { + return -1, err + } + return int32(val), nil +} \ No newline at end of file diff --git a/samples/server/petstore/go-api-server/README.md b/samples/server/petstore/go-api-server/README.md index fbcf4ae661b..a4d7833cc94 100644 --- a/samples/server/petstore/go-api-server/README.md +++ b/samples/server/petstore/go-api-server/README.md @@ -13,6 +13,7 @@ To see how to make this your own, look here: [README](https://openapi-generator.tech) - API version: 1.0.0 +- Build date: 2020-08-04T17:54:56.190+08:00[Asia/Hong_Kong] ### Running the server diff --git a/samples/server/petstore/go-api-server/go/api_pet.go b/samples/server/petstore/go-api-server/go/api_pet.go index f836529089a..dedd56c39a2 100644 --- a/samples/server/petstore/go-api-server/go/api_pet.go +++ b/samples/server/petstore/go-api-server/go/api_pet.go @@ -101,12 +101,11 @@ func (c *PetApiController) AddPet(w http.ResponseWriter, r *http.Request) { // DeletePet - Deletes a pet func (c *PetApiController) DeletePet(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) - petId, err := parseIntParameter(params["petId"]) + petId, err := parseInt64Parameter(params["petId"]) if err != nil { w.WriteHeader(500) return } - apiKey := r.Header.Get("apiKey") result, err := c.service.DeletePet(petId, apiKey) if err != nil { @@ -146,12 +145,11 @@ func (c *PetApiController) FindPetsByTags(w http.ResponseWriter, r *http.Request // GetPetById - Find pet by ID func (c *PetApiController) GetPetById(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) - petId, err := parseIntParameter(params["petId"]) + petId, err := parseInt64Parameter(params["petId"]) if err != nil { w.WriteHeader(500) return } - result, err := c.service.GetPetById(petId) if err != nil { w.WriteHeader(500) @@ -187,12 +185,11 @@ func (c *PetApiController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ } params := mux.Vars(r) - petId, err := parseIntParameter(params["petId"]) + petId, err := parseInt64Parameter(params["petId"]) if err != nil { w.WriteHeader(500) return } - name := r.FormValue("name") status := r.FormValue("status") result, err := c.service.UpdatePetWithForm(petId, name, status) @@ -213,12 +210,11 @@ func (c *PetApiController) UploadFile(w http.ResponseWriter, r *http.Request) { } params := mux.Vars(r) - petId, err := parseIntParameter(params["petId"]) + petId, err := parseInt64Parameter(params["petId"]) if err != nil { w.WriteHeader(500) return } - additionalMetadata := r.FormValue("additionalMetadata") file, err := ReadFormFileToTempFile(r, "file") if err != nil { diff --git a/samples/server/petstore/go-api-server/go/api_store.go b/samples/server/petstore/go-api-server/go/api_store.go index c79f13eeb05..6d94b57ec2b 100644 --- a/samples/server/petstore/go-api-server/go/api_store.go +++ b/samples/server/petstore/go-api-server/go/api_store.go @@ -84,12 +84,11 @@ func (c *StoreApiController) GetInventory(w http.ResponseWriter, r *http.Request // GetOrderById - Find purchase order by ID func (c *StoreApiController) GetOrderById(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) - orderId, err := parseIntParameter(params["orderId"]) + orderId, err := parseInt64Parameter(params["orderId"]) if err != nil { w.WriteHeader(500) return } - result, err := c.service.GetOrderById(orderId) if err != nil { w.WriteHeader(500) diff --git a/samples/server/petstore/go-api-server/go/routers.go b/samples/server/petstore/go-api-server/go/routers.go index bffdd7ec367..37af1301ef9 100644 --- a/samples/server/petstore/go-api-server/go/routers.go +++ b/samples/server/petstore/go-api-server/go/routers.go @@ -90,7 +90,16 @@ func ReadFormFileToTempFile(r *http.Request, key string) (*os.File, error) { return file, nil } -// parseIntParameter parses a sting parameter to an int64 -func parseIntParameter(param string) (int64, error) { +// parseInt64Parameter parses a sting parameter to an int64 +func parseInt64Parameter(param string) (int64, error) { return strconv.ParseInt(param, 10, 64) } + +// parseInt32Parameter parses a sting parameter to an int32 +func parseInt32Parameter(param string) (int32, error) { + val, err := strconv.ParseInt(param, 10, 32) + if err != nil { + return -1, err + } + return int32(val), nil +} \ No newline at end of file