From 30e3e5001ef23dbb32d0caf8453b1cee4487ebcf Mon Sep 17 00:00:00 2001 From: behrang sabeghi Date: Thu, 25 Mar 2021 14:04:45 -0700 Subject: [PATCH 1/9] make it possible to place models in a different package to prevent circular package references for go-server --- .../codegen/languages/GoServerCodegen.java | 18 +++++++++++++++--- .../src/main/resources/go-server/api.mustache | 6 ++++-- .../go-server/controller-api.mustache | 4 +++- .../main/resources/go-server/model.mustache | 2 +- .../main/resources/go-server/service.mustache | 8 +++++--- .../server/petstore/go-api-server/go/api.go | 6 ++++++ .../petstore/go-api-server/go/api_pet.go | 2 ++ .../go-api-server/go/api_pet_service.go | 4 +++- .../petstore/go-api-server/go/api_store.go | 2 ++ .../go-api-server/go/api_store_service.go | 4 +++- .../petstore/go-api-server/go/api_user.go | 2 ++ .../go-api-server/go/api_user_service.go | 4 +++- 12 files changed, 49 insertions(+), 13 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java index 49ab62e2b685..9dd3307e9f69 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java @@ -226,8 +226,10 @@ public void processOpts() { routers.put(router, router.equals(propRouter)); } additionalProperties.put("routers", routers); - - modelPackage = packageName; + + if (!additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)) { + modelPackage = packageName; + } apiPackage = packageName; /* @@ -265,6 +267,7 @@ public Map postProcessOperationsWithModels(Map o boolean addedTimeImport = false; boolean addedOSImport = false; + boolean addedModelImport = false; for (CodegenOperation operation : operations) { for (CodegenParameter param : operation.allParams) { // import "os" if the operation uses files @@ -280,6 +283,12 @@ public Map postProcessOperationsWithModels(Map o addedTimeImport = true; } } + + // import "models" directory if needed + if (!addedModelImport && param.isModel && !modelPackage.equals(apiPackage)) { + addedModelImport = true; + objs.put("hasDifferentModelDir", true); + } } } @@ -336,7 +345,10 @@ public String apiFileFolder() { @Override public String modelFileFolder() { - return outputFolder + File.separator + apiPackage().replace('.', File.separatorChar); + if (!additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)) { + return outputFolder + File.separator + apiPackage().replace('.', File.separatorChar); + } + return outputFolder + File.separator + modelPackage().replace('.', File.separatorChar); } public void setSourceFolder(String sourceFolder) { diff --git a/modules/openapi-generator/src/main/resources/go-server/api.mustache b/modules/openapi-generator/src/main/resources/go-server/api.mustache index 8249ffb38f66..2e27e7f3e17e 100644 --- a/modules/openapi-generator/src/main/resources/go-server/api.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/api.mustache @@ -4,7 +4,9 @@ package {{packageName}} import ( "context" "net/http"{{#apiInfo}}{{#apis}}{{#imports}} - "{{import}}"{{/imports}}{{/apis}}{{/apiInfo}} + "{{import}}"{{/imports}} + + {{#hasDifferentModelDir}}models "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}}{{/apis}}{{/apiInfo}} ) @@ -22,5 +24,5 @@ type {{classname}}Router interface { {{#operations}}{{#operation}} // while the service implementation can ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. type {{classname}}Servicer interface { {{#operations}}{{#operation}} - {{operationId}}(context.Context{{#allParams}}, {{dataType}}{{/allParams}}) (ImplResponse, error){{/operation}}{{/operations}} + {{operationId}}(context.Context{{#allParams}}, {{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/allParams}}) (ImplResponse, error){{/operation}}{{/operations}} }{{/apis}}{{/apiInfo}} 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 6dd5138e5256..daf215c9689a 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 @@ -14,6 +14,8 @@ import ( "github.com/go-chi/chi/v5" {{/chi}} {{/routers}} + + {{#hasDifferentModelDir}}models "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}} ) // A {{classname}}Controller binds http requests to an api service and writes the service results to the http response @@ -151,7 +153,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{paramName}} := r.Header.Get("{{baseName}}") {{/isHeaderParam}} {{#isBodyParam}} - {{paramName}} := &{{dataType}}{} + {{paramName}} := &{{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{} if err := json.NewDecoder(r.Body).Decode(&{{paramName}}); err != nil { w.WriteHeader(http.StatusBadRequest) return diff --git a/modules/openapi-generator/src/main/resources/go-server/model.mustache b/modules/openapi-generator/src/main/resources/go-server/model.mustache index 89860a8fe72e..55bd053361fd 100644 --- a/modules/openapi-generator/src/main/resources/go-server/model.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/model.mustache @@ -1,5 +1,5 @@ {{>partial_header}} -package {{packageName}} +package {{modelPackage}} {{#models}}{{#imports}} {{#-first}}import ( {{/-first}} "{{import}}"{{#-last}} diff --git a/modules/openapi-generator/src/main/resources/go-server/service.mustache b/modules/openapi-generator/src/main/resources/go-server/service.mustache index a5664b0c3504..08c2d3e6c872 100644 --- a/modules/openapi-generator/src/main/resources/go-server/service.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/service.mustache @@ -3,9 +3,11 @@ package {{packageName}} import ( "context" - "net/http" - "errors"{{#imports}} + "errors" + "net/http"{{#imports}} "{{import}}"{{/imports}} + + {{#hasDifferentModelDir}}models "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}} ) // {{classname}}Service is a service that implents the logic for the {{classname}}Servicer @@ -20,7 +22,7 @@ func New{{classname}}Service() {{classname}}Servicer { }{{#operations}}{{#operation}} // {{nickname}} - {{summary}} -func (s *{{classname}}Service) {{nickname}}(ctx context.Context{{#allParams}}, {{paramName}} {{dataType}}{{/allParams}}) (ImplResponse, error) { +func (s *{{classname}}Service) {{nickname}}(ctx context.Context{{#allParams}}, {{paramName}} {{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/allParams}}) (ImplResponse, error) { // TODO - update {{nickname}} with the required logic for this service method. // Add {{classFilename}}_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. diff --git a/samples/server/petstore/go-api-server/go/api.go b/samples/server/petstore/go-api-server/go/api.go index 64321a00b2e7..24e679157057 100644 --- a/samples/server/petstore/go-api-server/go/api.go +++ b/samples/server/petstore/go-api-server/go/api.go @@ -13,6 +13,12 @@ import ( "context" "net/http" "os" + + + + + + ) 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 cc38d894e67c..c4958feb50c6 100644 --- a/samples/server/petstore/go-api-server/go/api_pet.go +++ b/samples/server/petstore/go-api-server/go/api_pet.go @@ -15,6 +15,8 @@ import ( "strings" "github.com/gorilla/mux" + + ) // A PetApiController binds http requests to an api service and writes the service results to the http response diff --git a/samples/server/petstore/go-api-server/go/api_pet_service.go b/samples/server/petstore/go-api-server/go/api_pet_service.go index d5f272f37a7b..90071a3e00e8 100644 --- a/samples/server/petstore/go-api-server/go/api_pet_service.go +++ b/samples/server/petstore/go-api-server/go/api_pet_service.go @@ -11,9 +11,11 @@ package petstoreserver import ( "context" - "net/http" "errors" + "net/http" "os" + + ) // PetApiService is a service that implents the logic for the PetApiServicer 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 05df99f8bf3e..23fcfcc65e61 100644 --- a/samples/server/petstore/go-api-server/go/api_store.go +++ b/samples/server/petstore/go-api-server/go/api_store.go @@ -15,6 +15,8 @@ import ( "strings" "github.com/gorilla/mux" + + ) // A StoreApiController binds http requests to an api service and writes the service results to the http response diff --git a/samples/server/petstore/go-api-server/go/api_store_service.go b/samples/server/petstore/go-api-server/go/api_store_service.go index 27da55939a35..538018b82d8f 100644 --- a/samples/server/petstore/go-api-server/go/api_store_service.go +++ b/samples/server/petstore/go-api-server/go/api_store_service.go @@ -11,8 +11,10 @@ package petstoreserver import ( "context" - "net/http" "errors" + "net/http" + + ) // StoreApiService is a service that implents the logic for the StoreApiServicer diff --git a/samples/server/petstore/go-api-server/go/api_user.go b/samples/server/petstore/go-api-server/go/api_user.go index 9b89014ddbcd..9f904d44bf72 100644 --- a/samples/server/petstore/go-api-server/go/api_user.go +++ b/samples/server/petstore/go-api-server/go/api_user.go @@ -15,6 +15,8 @@ import ( "strings" "github.com/gorilla/mux" + + ) // A UserApiController binds http requests to an api service and writes the service results to the http response diff --git a/samples/server/petstore/go-api-server/go/api_user_service.go b/samples/server/petstore/go-api-server/go/api_user_service.go index c14d96ab3682..954c52f3e399 100644 --- a/samples/server/petstore/go-api-server/go/api_user_service.go +++ b/samples/server/petstore/go-api-server/go/api_user_service.go @@ -11,8 +11,10 @@ package petstoreserver import ( "context" - "net/http" "errors" + "net/http" + + ) // UserApiService is a service that implents the logic for the UserApiServicer From 012c31cb9b96c22d1038f693c5c3a0336c006e74 Mon Sep 17 00:00:00 2001 From: Ben Sabeghi Date: Thu, 17 Jun 2021 10:44:07 -0700 Subject: [PATCH 2/9] if the array is of model type, the package name of the model needs to be added to the parameter definition --- .../src/main/resources/go-server/api.mustache | 2 +- .../src/main/resources/go-server/controller-api.mustache | 2 +- samples/server/petstore/go-chi-server/go/api.go | 6 ++++++ samples/server/petstore/go-chi-server/go/api_pet.go | 2 ++ samples/server/petstore/go-chi-server/go/api_pet_service.go | 4 +++- samples/server/petstore/go-chi-server/go/api_store.go | 2 ++ .../server/petstore/go-chi-server/go/api_store_service.go | 4 +++- samples/server/petstore/go-chi-server/go/api_user.go | 2 ++ .../server/petstore/go-chi-server/go/api_user_service.go | 4 +++- 9 files changed, 23 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/go-server/api.mustache b/modules/openapi-generator/src/main/resources/go-server/api.mustache index 2e27e7f3e17e..460c5c86abd4 100644 --- a/modules/openapi-generator/src/main/resources/go-server/api.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/api.mustache @@ -24,5 +24,5 @@ type {{classname}}Router interface { {{#operations}}{{#operation}} // while the service implementation can ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. type {{classname}}Servicer interface { {{#operations}}{{#operation}} - {{operationId}}(context.Context{{#allParams}}, {{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/allParams}}) (ImplResponse, error){{/operation}}{{/operations}} + {{operationId}}(context.Context{{#allParams}}, {{#isArray}}[]{{^isPrimitiveType}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isPrimitiveType}}{{baseType}}{{/isArray}}{{^isArray}}{{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/isArray}}{{/allParams}}) (ImplResponse, error){{/operation}}{{/operations}} }{{/apis}}{{/apiInfo}} 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 daf215c9689a..65167cf0e8ce 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 @@ -153,7 +153,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{paramName}} := r.Header.Get("{{baseName}}") {{/isHeaderParam}} {{#isBodyParam}} - {{paramName}} := &{{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{} + {{paramName}} := &{{#isArray}}[]{{^isPrimitiveType}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isPrimitiveType}}{{baseType}}{{/isArray}}{{^isArray}}{{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/isArray}}{} if err := json.NewDecoder(r.Body).Decode(&{{paramName}}); err != nil { w.WriteHeader(http.StatusBadRequest) return diff --git a/samples/server/petstore/go-chi-server/go/api.go b/samples/server/petstore/go-chi-server/go/api.go index 64321a00b2e7..24e679157057 100644 --- a/samples/server/petstore/go-chi-server/go/api.go +++ b/samples/server/petstore/go-chi-server/go/api.go @@ -13,6 +13,12 @@ import ( "context" "net/http" "os" + + + + + + ) diff --git a/samples/server/petstore/go-chi-server/go/api_pet.go b/samples/server/petstore/go-chi-server/go/api_pet.go index 6d964844301c..8c63f46c4df7 100644 --- a/samples/server/petstore/go-chi-server/go/api_pet.go +++ b/samples/server/petstore/go-chi-server/go/api_pet.go @@ -15,6 +15,8 @@ import ( "strings" "github.com/go-chi/chi/v5" + + ) // A PetApiController binds http requests to an api service and writes the service results to the http response diff --git a/samples/server/petstore/go-chi-server/go/api_pet_service.go b/samples/server/petstore/go-chi-server/go/api_pet_service.go index d5f272f37a7b..90071a3e00e8 100644 --- a/samples/server/petstore/go-chi-server/go/api_pet_service.go +++ b/samples/server/petstore/go-chi-server/go/api_pet_service.go @@ -11,9 +11,11 @@ package petstoreserver import ( "context" - "net/http" "errors" + "net/http" "os" + + ) // PetApiService is a service that implents the logic for the PetApiServicer diff --git a/samples/server/petstore/go-chi-server/go/api_store.go b/samples/server/petstore/go-chi-server/go/api_store.go index 33b3b85494f6..2f2d82b7269d 100644 --- a/samples/server/petstore/go-chi-server/go/api_store.go +++ b/samples/server/petstore/go-chi-server/go/api_store.go @@ -15,6 +15,8 @@ import ( "strings" "github.com/go-chi/chi/v5" + + ) // A StoreApiController binds http requests to an api service and writes the service results to the http response diff --git a/samples/server/petstore/go-chi-server/go/api_store_service.go b/samples/server/petstore/go-chi-server/go/api_store_service.go index 27da55939a35..538018b82d8f 100644 --- a/samples/server/petstore/go-chi-server/go/api_store_service.go +++ b/samples/server/petstore/go-chi-server/go/api_store_service.go @@ -11,8 +11,10 @@ package petstoreserver import ( "context" - "net/http" "errors" + "net/http" + + ) // StoreApiService is a service that implents the logic for the StoreApiServicer diff --git a/samples/server/petstore/go-chi-server/go/api_user.go b/samples/server/petstore/go-chi-server/go/api_user.go index 46f6ae9d90f7..1d976a2e363d 100644 --- a/samples/server/petstore/go-chi-server/go/api_user.go +++ b/samples/server/petstore/go-chi-server/go/api_user.go @@ -15,6 +15,8 @@ import ( "strings" "github.com/go-chi/chi/v5" + + ) // A UserApiController binds http requests to an api service and writes the service results to the http response diff --git a/samples/server/petstore/go-chi-server/go/api_user_service.go b/samples/server/petstore/go-chi-server/go/api_user_service.go index c14d96ab3682..954c52f3e399 100644 --- a/samples/server/petstore/go-chi-server/go/api_user_service.go +++ b/samples/server/petstore/go-chi-server/go/api_user_service.go @@ -11,8 +11,10 @@ package petstoreserver import ( "context" - "net/http" "errors" + "net/http" + + ) // UserApiService is a service that implents the logic for the UserApiServicer From 6edc678edc47133c4ab9c7f70615f231474b7fd4 Mon Sep 17 00:00:00 2001 From: Kraust Date: Tue, 15 Feb 2022 19:47:03 -0500 Subject: [PATCH 3/9] Fixed Merging and re-generated samples. --- .../src/main/resources/go-server/api.mustache | 4 ---- .../go-server/controller-api.mustache | 2 +- .../go-api-server/.openapi-generator/FILES | 1 + .../go-chi-server/.openapi-generator/FILES | 1 + .../.openapi-generator/FILES | 1 + .../petstore/go-server-required/go/api.go | 19 ++++++++----------- .../petstore/go-server-required/go/api_pet.go | 14 +++++++------- .../go-server-required/go/api_pet_service.go | 2 +- .../go-server-required/go/api_store.go | 6 +++--- .../go/api_store_service.go | 2 +- .../go-server-required/go/api_user.go | 10 +++++----- .../go-server-required/go/api_user_service.go | 2 +- 12 files changed, 30 insertions(+), 34 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/go-server/api.mustache b/modules/openapi-generator/src/main/resources/go-server/api.mustache index e41bca12ef92..bfee2cf5a141 100644 --- a/modules/openapi-generator/src/main/resources/go-server/api.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/api.mustache @@ -27,12 +27,8 @@ type {{classname}}Router interface { {{#operations}}{{#operation}} // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. type {{classname}}Servicer interface { {{#operations}}{{#operation}} -<<<<<<< HEAD {{#isDeprecated}} // Deprecated {{/isDeprecated}} {{operationId}}(context.Context{{#allParams}}, {{#isArray}}[]{{^isPrimitiveType}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isPrimitiveType}}{{baseType}}{{/isArray}}{{^isArray}}{{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/isArray}}{{/allParams}}) (ImplResponse, error){{/operation}}{{/operations}} -======= - {{operationId}}(context.Context{{#allParams}}, {{dataType}}{{/allParams}}) (ImplResponse, error){{/operation}}{{/operations}} ->>>>>>> master }{{/apis}}{{/apiInfo}} 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 8e2427391526..45a83e6c9e88 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 @@ -199,7 +199,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{paramName}}Param := r.Header.Get("{{baseName}}") {{/isHeaderParam}} {{#isBodyParam}} - {{paramName}} := &{{#isArray}}[]{{^isPrimitiveType}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isPrimitiveType}}{{baseType}}{{/isArray}}{{^isArray}}{{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/isArray}}{} + {{paramName}}Param := {{#isArray}}[]{{^isPrimitiveType}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isPrimitiveType}}{{baseType}}{{/isArray}}{{^isArray}}{{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/isArray}}{} d := json.NewDecoder(r.Body) {{^isAdditionalPropertiesTrue}} d.DisallowUnknownFields() diff --git a/samples/server/petstore/go-api-server/.openapi-generator/FILES b/samples/server/petstore/go-api-server/.openapi-generator/FILES index 59b4003ddcec..bfddc1fc1400 100644 --- a/samples/server/petstore/go-api-server/.openapi-generator/FILES +++ b/samples/server/petstore/go-api-server/.openapi-generator/FILES @@ -1,3 +1,4 @@ +.openapi-generator-ignore Dockerfile README.md api/openapi.yaml diff --git a/samples/server/petstore/go-chi-server/.openapi-generator/FILES b/samples/server/petstore/go-chi-server/.openapi-generator/FILES index 59b4003ddcec..bfddc1fc1400 100644 --- a/samples/server/petstore/go-chi-server/.openapi-generator/FILES +++ b/samples/server/petstore/go-chi-server/.openapi-generator/FILES @@ -1,3 +1,4 @@ +.openapi-generator-ignore Dockerfile README.md api/openapi.yaml diff --git a/samples/server/petstore/go-server-required/.openapi-generator/FILES b/samples/server/petstore/go-server-required/.openapi-generator/FILES index 26b2edca0b85..86f9552610cb 100644 --- a/samples/server/petstore/go-server-required/.openapi-generator/FILES +++ b/samples/server/petstore/go-server-required/.openapi-generator/FILES @@ -1,3 +1,4 @@ +.openapi-generator-ignore Dockerfile README.md api/openapi.yaml diff --git a/samples/server/petstore/go-server-required/go/api.go b/samples/server/petstore/go-server-required/go/api.go index bedb0f7985e5..3ca080f00754 100644 --- a/samples/server/petstore/go-server-required/go/api.go +++ b/samples/server/petstore/go-server-required/go/api.go @@ -15,12 +15,10 @@ import ( "os" ) - - // PetApiRouter defines the required methods for binding the api requests to a responses for the PetApi // The PetApiRouter implementation should parse necessary information from the http request, // pass the data to a PetApiServicer to perform the required actions, then write the service results to the http response. -type PetApiRouter interface { +type PetApiRouter interface { AddPet(http.ResponseWriter, *http.Request) DeletePet(http.ResponseWriter, *http.Request) FindPetsByStatus(http.ResponseWriter, *http.Request) @@ -31,19 +29,21 @@ type PetApiRouter interface { UpdatePetWithForm(http.ResponseWriter, *http.Request) UploadFile(http.ResponseWriter, *http.Request) } + // StoreApiRouter defines the required methods for binding the api requests to a responses for the StoreApi // The StoreApiRouter implementation should parse necessary information from the http request, // pass the data to a StoreApiServicer to perform the required actions, then write the service results to the http response. -type StoreApiRouter interface { +type StoreApiRouter interface { DeleteOrder(http.ResponseWriter, *http.Request) GetInventory(http.ResponseWriter, *http.Request) GetOrderById(http.ResponseWriter, *http.Request) PlaceOrder(http.ResponseWriter, *http.Request) } + // UserApiRouter defines the required methods for binding the api requests to a responses for the UserApi // The UserApiRouter implementation should parse necessary information from the http request, // pass the data to a UserApiServicer to perform the required actions, then write the service results to the http response. -type UserApiRouter interface { +type UserApiRouter interface { CreateUser(http.ResponseWriter, *http.Request) CreateUsersWithArrayInput(http.ResponseWriter, *http.Request) CreateUsersWithListInput(http.ResponseWriter, *http.Request) @@ -54,12 +54,11 @@ type UserApiRouter interface { UpdateUser(http.ResponseWriter, *http.Request) } - // PetApiServicer defines the api actions for the PetApi service // This interface intended to stay up to date with the openapi yaml used to generate it, // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. -type PetApiServicer interface { +type PetApiServicer interface { AddPet(context.Context, Pet) (ImplResponse, error) DeletePet(context.Context, int64, string) (ImplResponse, error) FindPetsByStatus(context.Context, []string) (ImplResponse, error) @@ -71,24 +70,22 @@ type PetApiServicer interface { UploadFile(context.Context, int64, string, *os.File) (ImplResponse, error) } - // StoreApiServicer defines the api actions for the StoreApi service // This interface intended to stay up to date with the openapi yaml used to generate it, // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. -type StoreApiServicer interface { +type StoreApiServicer interface { DeleteOrder(context.Context, string) (ImplResponse, error) GetInventory(context.Context) (ImplResponse, error) GetOrderById(context.Context, int64) (ImplResponse, error) PlaceOrder(context.Context, Order) (ImplResponse, error) } - // UserApiServicer defines the api actions for the UserApi service // This interface intended to stay up to date with the openapi yaml used to generate it, // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. -type UserApiServicer interface { +type UserApiServicer interface { CreateUser(context.Context, User) (ImplResponse, error) CreateUsersWithArrayInput(context.Context, []User) (ImplResponse, error) CreateUsersWithListInput(context.Context, []User) (ImplResponse, error) diff --git a/samples/server/petstore/go-server-required/go/api_pet.go b/samples/server/petstore/go-server-required/go/api_pet.go index 2202804fb200..6405a4e520d0 100644 --- a/samples/server/petstore/go-server-required/go/api_pet.go +++ b/samples/server/petstore/go-server-required/go/api_pet.go @@ -19,7 +19,7 @@ import ( // PetApiController binds http requests to an api service and writes the service results to the http response type PetApiController struct { - service PetApiServicer + service PetApiServicer errorHandler ErrorHandler } @@ -49,7 +49,7 @@ func NewPetApiController(s PetApiServicer, opts ...PetApiOption) Router { // Routes returns all the api routes for the PetApiController func (c *PetApiController) Routes() Routes { - return Routes{ + return Routes{ { "AddPet", strings.ToUpper("Post"), @@ -231,8 +231,8 @@ func (c *PetApiController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ return } - nameParam := r.FormValue("name") - statusParam := r.FormValue("status") + nameParam := r.FormValue("name") + statusParam := r.FormValue("status") result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam) // If an error occurred, encode the error with the status code if err != nil { @@ -256,14 +256,14 @@ func (c *PetApiController) UploadFile(w http.ResponseWriter, r *http.Request) { return } - additionalMetadataParam := r.FormValue("additionalMetadata") - + additionalMetadataParam := r.FormValue("additionalMetadata") + fileParam, err := ReadFormFileToTempFile(r, "file") if err != nil { c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } - result, err := c.service.UploadFile(r.Context(), petIdParam, additionalMetadataParam, fileParam) + result, err := c.service.UploadFile(r.Context(), petIdParam, additionalMetadataParam, fileParam) // If an error occurred, encode the error with the status code if err != nil { c.errorHandler(w, r, err, &result) diff --git a/samples/server/petstore/go-server-required/go/api_pet_service.go b/samples/server/petstore/go-server-required/go/api_pet_service.go index 9a390ecef3d0..a7993147e9a6 100644 --- a/samples/server/petstore/go-server-required/go/api_pet_service.go +++ b/samples/server/petstore/go-server-required/go/api_pet_service.go @@ -11,8 +11,8 @@ package petstoreserver import ( "context" - "net/http" "errors" + "net/http" "os" ) diff --git a/samples/server/petstore/go-server-required/go/api_store.go b/samples/server/petstore/go-server-required/go/api_store.go index 67a30090afb3..667f9bc06deb 100644 --- a/samples/server/petstore/go-server-required/go/api_store.go +++ b/samples/server/petstore/go-server-required/go/api_store.go @@ -19,7 +19,7 @@ import ( // StoreApiController binds http requests to an api service and writes the service results to the http response type StoreApiController struct { - service StoreApiServicer + service StoreApiServicer errorHandler ErrorHandler } @@ -49,7 +49,7 @@ func NewStoreApiController(s StoreApiServicer, opts ...StoreApiOption) Router { // Routes returns all the api routes for the StoreApiController func (c *StoreApiController) Routes() Routes { - return Routes{ + return Routes{ { "DeleteOrder", strings.ToUpper("Delete"), @@ -80,7 +80,7 @@ func (c *StoreApiController) Routes() Routes { // DeleteOrder - Delete purchase order by ID func (c *StoreApiController) DeleteOrder(w http.ResponseWriter, r *http.Request) { orderIdParam := chi.URLParam(r, "orderId") - + result, err := c.service.DeleteOrder(r.Context(), orderIdParam) // If an error occurred, encode the error with the status code if err != nil { diff --git a/samples/server/petstore/go-server-required/go/api_store_service.go b/samples/server/petstore/go-server-required/go/api_store_service.go index 3c91040fa9f7..57d31c5f6bdd 100644 --- a/samples/server/petstore/go-server-required/go/api_store_service.go +++ b/samples/server/petstore/go-server-required/go/api_store_service.go @@ -11,8 +11,8 @@ package petstoreserver import ( "context" - "net/http" "errors" + "net/http" ) // StoreApiService is a service that implements the logic for the StoreApiServicer diff --git a/samples/server/petstore/go-server-required/go/api_user.go b/samples/server/petstore/go-server-required/go/api_user.go index a48ab1c454a4..361e0542e7dc 100644 --- a/samples/server/petstore/go-server-required/go/api_user.go +++ b/samples/server/petstore/go-server-required/go/api_user.go @@ -19,7 +19,7 @@ import ( // UserApiController binds http requests to an api service and writes the service results to the http response type UserApiController struct { - service UserApiServicer + service UserApiServicer errorHandler ErrorHandler } @@ -49,7 +49,7 @@ func NewUserApiController(s UserApiServicer, opts ...UserApiOption) Router { // Routes returns all the api routes for the UserApiController func (c *UserApiController) Routes() Routes { - return Routes{ + return Routes{ { "CreateUser", strings.ToUpper("Post"), @@ -180,7 +180,7 @@ func (c *UserApiController) CreateUsersWithListInput(w http.ResponseWriter, r *h // DeleteUser - Delete user func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - + result, err := c.service.DeleteUser(r.Context(), usernameParam) // If an error occurred, encode the error with the status code if err != nil { @@ -195,7 +195,7 @@ func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { // GetUserByName - Get user by user name func (c *UserApiController) GetUserByName(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - + result, err := c.service.GetUserByName(r.Context(), usernameParam) // If an error occurred, encode the error with the status code if err != nil { @@ -239,7 +239,7 @@ func (c *UserApiController) LogoutUser(w http.ResponseWriter, r *http.Request) { // UpdateUser - Updated user func (c *UserApiController) UpdateUser(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - + userParam := User{} d := json.NewDecoder(r.Body) d.DisallowUnknownFields() diff --git a/samples/server/petstore/go-server-required/go/api_user_service.go b/samples/server/petstore/go-server-required/go/api_user_service.go index 6ae5a6d751bc..759f1871f28f 100644 --- a/samples/server/petstore/go-server-required/go/api_user_service.go +++ b/samples/server/petstore/go-server-required/go/api_user_service.go @@ -11,8 +11,8 @@ package petstoreserver import ( "context" - "net/http" "errors" + "net/http" ) // UserApiService is a service that implements the logic for the UserApiServicer From fc505e5eb241c5be9662993e1768f1fc1dc3c5ad Mon Sep 17 00:00:00 2001 From: Kraust Date: Wed, 16 Feb 2022 06:11:49 -0500 Subject: [PATCH 4/9] First pass at separating out supporting files from apis and models. --- .../codegen/languages/GoServerCodegen.java | 11 +-- .../src/main/resources/go-server/api.mustache | 5 +- .../go-server/controller-api.mustache | 76 +++++++++---------- .../main/resources/go-server/error.mustache | 2 +- .../main/resources/go-server/helpers.mustache | 35 ++++++++- .../main/resources/go-server/impl.mustache | 2 +- .../main/resources/go-server/logger.mustache | 2 +- .../main/resources/go-server/main.mustache | 3 +- .../main/resources/go-server/model.mustache | 17 +++-- .../main/resources/go-server/routers.mustache | 50 +++--------- .../main/resources/go-server/service.mustache | 11 +-- .../go-api-server/.openapi-generator/FILES | 10 +-- .../petstore/go-api-server/go/api_pet.go | 62 +++++++-------- .../go-api-server/go/api_pet_service.go | 65 ++++++++-------- .../petstore/go-api-server/go/api_store.go | 30 ++++---- .../go-api-server/go/api_store_service.go | 33 ++++---- .../petstore/go-api-server/go/api_user.go | 46 +++++------ .../go-api-server/go/api_user_service.go | 59 +++++++------- .../go-api-server/go/model_api_response.go | 8 +- .../go-api-server/go/model_category.go | 8 +- .../petstore/go-api-server/go/model_order.go | 6 +- .../petstore/go-api-server/go/model_pet.go | 12 ++- .../petstore/go-api-server/go/model_tag.go | 8 +- .../petstore/go-api-server/go/model_user.go | 8 +- samples/server/petstore/go-api-server/main.go | 3 +- .../go-api-server/{go => support}/error.go | 2 +- .../go => go-api-server/support}/helpers.go | 30 +++++++- .../go => go-api-server/support}/impl.go | 2 +- .../go => go-api-server/support}/logger.go | 2 +- .../go-api-server/{go => support}/routers.go | 45 +++-------- .../go-chi-server/.openapi-generator/FILES | 10 +-- .../server/petstore/go-chi-server/go/api.go | 43 ++++++----- .../petstore/go-chi-server/go/api_pet.go | 62 +++++++-------- .../go-chi-server/go/api_pet_service.go | 65 ++++++++-------- .../petstore/go-chi-server/go/api_store.go | 30 ++++---- .../go-chi-server/go/api_store_service.go | 33 ++++---- .../petstore/go-chi-server/go/api_user.go | 46 +++++------ .../go-chi-server/go/api_user_service.go | 59 +++++++------- .../go-chi-server/go/model_api_response.go | 8 +- .../go-chi-server/go/model_category.go | 8 +- .../petstore/go-chi-server/go/model_order.go | 6 +- .../petstore/go-chi-server/go/model_pet.go | 12 ++- .../petstore/go-chi-server/go/model_tag.go | 8 +- .../petstore/go-chi-server/go/model_user.go | 8 +- samples/server/petstore/go-chi-server/main.go | 3 +- .../go => go-chi-server/support}/error.go | 2 +- .../go => go-chi-server/support}/helpers.go | 30 +++++++- .../go => go-chi-server/support}/impl.go | 2 +- .../go-chi-server/{go => support}/logger.go | 2 +- .../go-chi-server/{go => support}/routers.go | 45 +++-------- .../.openapi-generator/FILES | 10 +-- .../petstore/go-server-required/go/api.go | 68 ++++++++++------- .../petstore/go-server-required/go/api_pet.go | 76 ++++++++++--------- .../go-server-required/go/api_pet_service.go | 67 ++++++++-------- .../go-server-required/go/api_store.go | 36 ++++----- .../go/api_store_service.go | 35 +++++---- .../go-server-required/go/api_user.go | 56 +++++++------- .../go-server-required/go/api_user_service.go | 61 ++++++++------- .../go/model_api_response.go | 8 +- .../go-server-required/go/model_category.go | 8 +- .../go-server-required/go/model_order.go | 10 +-- .../go-server-required/go/model_order_info.go | 6 +- .../go-server-required/go/model_pet.go | 12 ++- .../go/model_special_info.go | 8 +- .../go-server-required/go/model_tag.go | 8 +- .../go-server-required/go/model_user.go | 12 ++- .../petstore/go-server-required/main.go | 3 +- .../support}/error.go | 2 +- .../{go => support}/helpers.go | 30 +++++++- .../go => go-server-required/support}/impl.go | 2 +- .../support}/logger.go | 2 +- .../{go => support}/routers.go | 45 +++-------- 72 files changed, 918 insertions(+), 782 deletions(-) rename samples/server/petstore/go-api-server/{go => support}/error.go (98%) rename samples/server/petstore/{go-chi-server/go => go-api-server/support}/helpers.go (70%) rename samples/server/petstore/{go-chi-server/go => go-api-server/support}/impl.go (94%) rename samples/server/petstore/{go-server-required/go => go-api-server/support}/logger.go (96%) rename samples/server/petstore/go-api-server/{go => support}/routers.go (75%) rename samples/server/petstore/{go-server-required/go => go-chi-server/support}/error.go (98%) rename samples/server/petstore/{go-api-server/go => go-chi-server/support}/helpers.go (70%) rename samples/server/petstore/{go-server-required/go => go-chi-server/support}/impl.go (94%) rename samples/server/petstore/go-chi-server/{go => support}/logger.go (96%) rename samples/server/petstore/go-chi-server/{go => support}/routers.go (75%) rename samples/server/petstore/{go-chi-server/go => go-server-required/support}/error.go (98%) rename samples/server/petstore/go-server-required/{go => support}/helpers.go (70%) rename samples/server/petstore/{go-api-server/go => go-server-required/support}/impl.go (94%) rename samples/server/petstore/{go-api-server/go => go-server-required/support}/logger.go (96%) rename samples/server/petstore/go-server-required/{go => support}/routers.go (75%) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java index 2648a760d0d8..bec56dabe2d4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java @@ -51,6 +51,7 @@ public class GoServerCodegen extends AbstractGoCodegen { protected int serverPort = 8080; protected String projectName = "openapi-server"; protected String sourceFolder = "go"; + protected String supportFolder = "support"; protected Boolean corsFeatureEnabled = false; protected Boolean addResponseHeaders = false; @@ -244,12 +245,12 @@ public void processOpts() { supportingFiles.add(new SupportingFile("main.mustache", "", "main.go")); supportingFiles.add(new SupportingFile("Dockerfile.mustache", "", "Dockerfile")); supportingFiles.add(new SupportingFile("go.mod.mustache", "", "go.mod")); - supportingFiles.add(new SupportingFile("routers.mustache", sourceFolder, "routers.go")); - supportingFiles.add(new SupportingFile("logger.mustache", sourceFolder, "logger.go")); - supportingFiles.add(new SupportingFile("impl.mustache",sourceFolder, "impl.go")); - supportingFiles.add(new SupportingFile("helpers.mustache", sourceFolder, "helpers.go")); + supportingFiles.add(new SupportingFile("routers.mustache", supportFolder, "routers.go")); + supportingFiles.add(new SupportingFile("logger.mustache", supportFolder, "logger.go")); + supportingFiles.add(new SupportingFile("impl.mustache", supportFolder, "impl.go")); + supportingFiles.add(new SupportingFile("helpers.mustache", supportFolder, "helpers.go")); supportingFiles.add(new SupportingFile("api.mustache", sourceFolder, "api.go")); - supportingFiles.add(new SupportingFile("error.mustache", sourceFolder, "error.go")); + supportingFiles.add(new SupportingFile("error.mustache", supportFolder, "error.go")); supportingFiles.add(new SupportingFile("README.mustache", "", "README.md") .doNotOverwrite()); } diff --git a/modules/openapi-generator/src/main/resources/go-server/api.mustache b/modules/openapi-generator/src/main/resources/go-server/api.mustache index bfee2cf5a141..5d7435742a5c 100644 --- a/modules/openapi-generator/src/main/resources/go-server/api.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/api.mustache @@ -6,7 +6,8 @@ import ( "net/http"{{#apiInfo}}{{#apis}}{{#imports}} "{{import}}"{{/imports}} - {{#hasDifferentModelDir}}models "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}}{{/apis}}{{/apiInfo}} + "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/support" + {{#hasDifferentModelDir}}"{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}}{{/apis}}{{/apiInfo}} ) @@ -30,5 +31,5 @@ type {{classname}}Servicer interface { {{#operations}}{{#operation}} {{#isDeprecated}} // Deprecated {{/isDeprecated}} - {{operationId}}(context.Context{{#allParams}}, {{#isArray}}[]{{^isPrimitiveType}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isPrimitiveType}}{{baseType}}{{/isArray}}{{^isArray}}{{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/isArray}}{{/allParams}}) (ImplResponse, error){{/operation}}{{/operations}} + {{operationId}}(context.Context{{#allParams}}, {{#isArray}}[]{{/isArray}}{{#isArray}}{{#items}}{{#isModel}}{{#hasDifferentModelDir}}{{modelPackage}}.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/items}}{{/isArray}}{{^isArray}}{{#isModel}}{{#hasDifferentModelDir}}{{modelPackage}}.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/isArray}}{{/allParams}}) (support.ImplResponse, error){{/operation}}{{/operations}} }{{/apis}}{{/apiInfo}} 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 45a83e6c9e88..0c2bd4b589fc 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 @@ -2,7 +2,6 @@ package {{packageName}} import ( - "encoding/json" "net/http" "strings" @@ -15,30 +14,31 @@ import ( {{/chi}} {{/routers}} - {{#hasDifferentModelDir}}models "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}} + support "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/support" + {{#hasDifferentModelDir}}"{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}} ) // {{classname}}Controller binds http requests to an api service and writes the service results to the http response type {{classname}}Controller struct { service {{classname}}Servicer - errorHandler ErrorHandler + errorHandler support.ErrorHandler } // {{classname}}Option for how the controller is set up. type {{classname}}Option func(*{{classname}}Controller) // With{{classname}}ErrorHandler inject ErrorHandler into controller -func With{{classname}}ErrorHandler(h ErrorHandler) {{classname}}Option { +func With{{classname}}ErrorHandler(h support.ErrorHandler) {{classname}}Option { return func(c *{{classname}}Controller) { c.errorHandler = h } } // New{{classname}}Controller creates a default api controller -func New{{classname}}Controller(s {{classname}}Servicer, opts ...{{classname}}Option) Router { +func New{{classname}}Controller(s {{classname}}Servicer, opts ...{{classname}}Option) support.Router { controller := &{{classname}}Controller{ service: s, - errorHandler: DefaultErrorHandler, + errorHandler: support.DefaultErrorHandler, } for _, opt := range opts { @@ -49,8 +49,8 @@ func New{{classname}}Controller(s {{classname}}Servicer, opts ...{{classname}}Op } // Routes returns all the api routes for the {{classname}}Controller -func (c *{{classname}}Controller) Routes() Routes { - return Routes{ {{#operations}}{{#operation}} +func (c *{{classname}}Controller) Routes() support.Routes { + return support.Routes{ {{#operations}}{{#operation}} { "{{operationId}}", strings.ToUpper("{{httpMethod}}"), @@ -68,13 +68,13 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{#hasFormParams}} {{#isMultipart}} if err := r.ParseMultipartForm(32 << 20); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{/isMultipart}} {{^isMultipart}} if err := r.ParseForm(); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{/isMultipart}} @@ -92,16 +92,16 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{#allParams}} {{#isPathParam}} {{#isLong}} - {{paramName}}Param, err := parseInt64Parameter({{#routers}}{{#mux}}params["{{baseName}}"]{{/mux}}{{#chi}}chi.URLParam(r, "{{baseName}}"){{/chi}}{{/routers}}, {{required}}) + {{paramName}}Param, err := support.ParseInt64Parameter({{#routers}}{{#mux}}params["{{baseName}}"]{{/mux}}{{#chi}}chi.URLParam(r, "{{baseName}}"){{/chi}}{{/routers}}, {{required}}) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{/isLong}} {{#isInteger}} - {{paramName}}Param, err := parseInt32Parameter({{#routers}}{{#mux}}params["{{baseName}}"]{{/mux}}{{#chi}}chi.URLParam(r, "{{baseName}}"){{/chi}}{{/routers}}, {{required}}) + {{paramName}}Param, err := support.ParseInt32Parameter({{#routers}}{{#mux}}params["{{baseName}}"]{{/mux}}{{#chi}}chi.URLParam(r, "{{baseName}}"){{/chi}}{{/routers}}, {{required}}) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{/isInteger}} @@ -112,21 +112,21 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{/isPathParam}} {{#isQueryParam}} {{#isLong}} - {{paramName}}Param, err := parseInt64Parameter(query.Get("{{baseName}}"), {{required}}) + {{paramName}}Param, err := support.ParseInt64Parameter(query.Get("{{baseName}}"), {{required}}) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{/isLong}} {{#isInteger}} - {{paramName}}Param, err := parseInt32Parameter(query.Get("{{baseName}}"), {{required}}) + {{paramName}}Param, err := support.ParseInt32Parameter(query.Get("{{baseName}}"), {{required}}) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{/isInteger}} {{#isBoolean}} - {{paramName}}Param, err := parseBoolParameter(query.Get("{{baseName}}")) + {{paramName}}Param, err := support.ParseBoolParameter(query.Get("{{baseName}}")) if err != nil { w.WriteHeader(500) return @@ -134,16 +134,16 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{/isBoolean}} {{#isArray}} {{#items.isLong}} - {{paramName}}Param, err := parseInt64ArrayParameter(query.Get("{{baseName}}"), ",", {{required}}) + {{paramName}}Param, err := support.ParseInt64ArrayParameter(query.Get("{{baseName}}"), ",", {{required}}) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{/items.isLong}} {{#items.isInteger}} - {{paramName}}Param, err := parseInt32ArrayParameter(query.Get("{{baseName}}"), ",", {{required}}) + {{paramName}}Param, err := support.ParseInt32ArrayParameter(query.Get("{{baseName}}"), ",", {{required}}) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{/items.isInteger}} @@ -165,27 +165,27 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{/isQueryParam}} {{#isFormParam}} {{#isFile}}{{#isArray}} - {{paramName}}Param, err := ReadFormFilesToTempFiles(r, "{{baseName}}"){{/isArray}}{{^isArray}} - {{paramName}}Param, err := ReadFormFileToTempFile(r, "{{baseName}}") + {{paramName}}Param, err := support.ReadFormFilesToTempFiles(r, "{{baseName}}"){{/isArray}}{{^isArray}} + {{paramName}}Param, err := support.ReadFormFileToTempFile(r, "{{baseName}}") {{/isArray}} if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{/isFile}} {{#isLong}}{{#isArray}} - {{paramName}}Param, err := parseInt64ArrayParameter(r.FormValue("{{baseName}}"), ",", {{required}}){{/isArray}}{{^isArray}} - {{paramName}}Param, err := parseInt64Parameter(r.FormValue("{{baseName}}"), {{required}}){{/isArray}} + {{paramName}}Param, err := support.ParseInt64ArrayParameter(r.FormValue("{{baseName}}"), ",", {{required}}){{/isArray}}{{^isArray}} + {{paramName}}Param, err := support.ParseInt64Parameter(r.FormValue("{{baseName}}"), {{required}}){{/isArray}} if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{/isLong}} {{#isInteger}}{{#isArray}} - {{paramName}}Param, err := parseInt32ArrayParameter(r.FormValue("{{baseName}}"), ",", {{required}}){{/isArray}}{{^isArray}} - {{paramName}}Param, err := parseInt32Parameter(r.FormValue("{{baseName}}"), {{required}}){{/isArray}} + {{paramName}}Param, err := support.ParseInt32ArrayParameter(r.FormValue("{{baseName}}"), ",", {{required}}){{/isArray}}{{^isArray}} + {{paramName}}Param, err := support.ParseInt32Parameter(r.FormValue("{{baseName}}"), {{required}}){{/isArray}} if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{/isInteger}} @@ -199,19 +199,19 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{paramName}}Param := r.Header.Get("{{baseName}}") {{/isHeaderParam}} {{#isBodyParam}} - {{paramName}}Param := {{#isArray}}[]{{^isPrimitiveType}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isPrimitiveType}}{{baseType}}{{/isArray}}{{^isArray}}{{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/isArray}}{} - d := json.NewDecoder(r.Body) + {{paramName}}Param := {{#isArray}}[]{{^isPrimitiveType}}{{#hasDifferentModelDir}}{{modelPackage}}.{{/hasDifferentModelDir}}{{/isPrimitiveType}}{{baseType}}{{/isArray}}{{^isArray}}{{#isModel}}{{#hasDifferentModelDir}}{{modelPackage}}.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/isArray}}{} + d := support.NewJSONDecoder(r.Body) {{^isAdditionalPropertiesTrue}} d.DisallowUnknownFields() {{/isAdditionalPropertiesTrue}} if err := d.Decode(&{{paramName}}Param); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } {{#isArray}} {{#items.isModel}} for _, el := range {{paramName}}Param { - if err := Assert{{baseType}}Required(el); err != nil { + if err := {{#hasDifferentModelDir}}{{modelPackage}}.{{/hasDifferentModelDir}}Assert{{baseType}}Required(el); err != nil { c.errorHandler(w, r, err, nil) return } @@ -220,7 +220,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re {{/isArray}} {{^isArray}} {{#isModel}} - if err := Assert{{baseType}}Required({{paramName}}Param); err != nil { + if err := {{#hasDifferentModelDir}}{{modelPackage}}.{{/hasDifferentModelDir}}Assert{{baseType}}Required({{paramName}}Param); err != nil { c.errorHandler(w, r, err, nil) return } @@ -235,6 +235,6 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code,{{#addResponseHeaders}} result.Headers,{{/addResponseHeaders}} w) + support.EncodeJSONResponse(result.Body, &result.Code,{{#addResponseHeaders}} result.Headers,{{/addResponseHeaders}} w) }{{/operation}}{{/operations}} diff --git a/modules/openapi-generator/src/main/resources/go-server/error.mustache b/modules/openapi-generator/src/main/resources/go-server/error.mustache index a4ffa03f53f9..f3fff2cc95e6 100644 --- a/modules/openapi-generator/src/main/resources/go-server/error.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/error.mustache @@ -1,5 +1,5 @@ {{>partial_header}} -package {{packageName}} +package support import ( "errors" diff --git a/modules/openapi-generator/src/main/resources/go-server/helpers.mustache b/modules/openapi-generator/src/main/resources/go-server/helpers.mustache index 6de33d11437d..f911b50096a0 100644 --- a/modules/openapi-generator/src/main/resources/go-server/helpers.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/helpers.mustache @@ -1,7 +1,10 @@ {{>partial_header}} -package {{packageName}} +package support import ( + "encoding/json" + "net/http" + "io" "reflect" ) @@ -58,3 +61,33 @@ func AssertRecurseValueRequired(value reflect.Value, callback func(interface{}) } return nil } + +// EncodeJSONResponse uses the json encoder to write an interface to the http response with an optional status code +func EncodeJSONResponse(i interface{}, status *int,{{#addResponseHeaders}} headers map[string][]string,{{/addResponseHeaders}} w http.ResponseWriter) error { + {{#addResponseHeaders}} + wHeader := w.Header() + if headers != nil { + for key, values := range headers { + for _, value := range values { + wHeader.Add(key, value) + } + } + } + wHeader.Set("Content-Type", "application/json; charset=UTF-8") + {{/addResponseHeaders}} + {{^addResponseHeaders}} + w.Header().Set("Content-Type", "application/json; charset=UTF-8") + {{/addResponseHeaders}} + if status != nil { + w.WriteHeader(*status) + } else { + w.WriteHeader(http.StatusOK) + } + + return json.NewEncoder(w).Encode(i) +} + +// NewJSONDecoder creates a jew json decoder to decode an http body. +func NewJSONDecoder(r io.Reader) *json.Decoder { + return json.NewDecoder(r) +} diff --git a/modules/openapi-generator/src/main/resources/go-server/impl.mustache b/modules/openapi-generator/src/main/resources/go-server/impl.mustache index 81c25ffb9739..6eb1a5586bc5 100644 --- a/modules/openapi-generator/src/main/resources/go-server/impl.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/impl.mustache @@ -1,5 +1,5 @@ {{>partial_header}} -package {{packageName}} +package support // ImplResponse response defines an error code with the associated body type ImplResponse struct { diff --git a/modules/openapi-generator/src/main/resources/go-server/logger.mustache b/modules/openapi-generator/src/main/resources/go-server/logger.mustache index e8464d6ad5f5..be53197a3e73 100644 --- a/modules/openapi-generator/src/main/resources/go-server/logger.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/logger.mustache @@ -1,5 +1,5 @@ {{>partial_header}} -package {{packageName}} +package support import ( "log" diff --git a/modules/openapi-generator/src/main/resources/go-server/main.mustache b/modules/openapi-generator/src/main/resources/go-server/main.mustache index 2bbff85ca734..8ba55e7cf5a8 100644 --- a/modules/openapi-generator/src/main/resources/go-server/main.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/main.mustache @@ -6,6 +6,7 @@ import ( "net/http" {{packageName}} "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{sourceFolder}}" + support "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/support" ) func main() { @@ -14,7 +15,7 @@ func main() { {{classname}}Service := {{packageName}}.New{{classname}}Service() {{classname}}Controller := {{packageName}}.New{{classname}}Controller({{classname}}Service) {{/apis}}{{/apiInfo}} - router := {{packageName}}.NewRouter({{#apiInfo}}{{#apis}}{{classname}}Controller{{^-last}}, {{/-last}}{{/apis}}{{/apiInfo}}) + router := support.NewRouter({{#apiInfo}}{{#apis}}{{classname}}Controller{{^-last}}, {{/-last}}{{/apis}}{{/apiInfo}}) log.Fatal(http.ListenAndServe(":{{serverPort}}", router)) } diff --git a/modules/openapi-generator/src/main/resources/go-server/model.mustache b/modules/openapi-generator/src/main/resources/go-server/model.mustache index 6b72e26c3502..554217fdcf24 100644 --- a/modules/openapi-generator/src/main/resources/go-server/model.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/model.mustache @@ -1,10 +1,11 @@ {{>partial_header}} package {{modelPackage}} -{{#models}}{{#imports}} -{{#-first}}import ( -{{/-first}} "{{import}}"{{#-last}} +{{#models}} +import ( + {{#imports}}"{{import}}"{{/imports}} + support "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/support" ) -{{/-last}}{{/imports}}{{#model}}{{#isEnum}}{{#description}}// {{{classname}}} : {{{description}}}{{/description}} +{{#model}}{{#isEnum}}{{#description}}// {{{classname}}} : {{{description}}}{{/description}} type {{{classname}}} {{^format}}{{dataType}}{{/format}}{{{format}}} // List of {{{classname}}} @@ -43,8 +44,8 @@ func Assert{{classname}}Required(obj {{classname}}) error { {{#requiredVars}} "{{baseName}}": obj.{{name}}, {{/requiredVars}} } for name, el := range elements { - if isZero := IsZeroValue(el); isZero { - return &RequiredError{Field: name} + if isZero := support.IsZeroValue(el); isZero { + return &support.RequiredError{Field: name} } } @@ -124,10 +125,10 @@ func Assert{{classname}}Required(obj {{classname}}) error { // AssertRecurse{{classname}}Required recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of {{classname}} (e.g. [][]{{classname}}), otherwise ErrTypeAssertionError is thrown. func AssertRecurse{{classname}}Required(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { a{{classname}}, ok := obj.({{classname}}) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return Assert{{classname}}Required(a{{classname}}) }) 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 b26f8febb410..26dc6f476918 100644 --- a/modules/openapi-generator/src/main/resources/go-server/routers.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/routers.mustache @@ -1,8 +1,7 @@ {{>partial_header}} -package {{packageName}} +package support import ( - "encoding/json" "errors" {{#routers}} {{#mux}} @@ -86,31 +85,6 @@ func NewRouter(routers ...Router) {{#routers}}{{#mux}}*mux.Router{{/mux}}{{#chi} return router } -// EncodeJSONResponse uses the json encoder to write an interface to the http response with an optional status code -func EncodeJSONResponse(i interface{}, status *int,{{#addResponseHeaders}} headers map[string][]string,{{/addResponseHeaders}} w http.ResponseWriter) error { - {{#addResponseHeaders}} - wHeader := w.Header() - if headers != nil { - for key, values := range headers { - for _, value := range values { - wHeader.Add(key, value) - } - } - } - wHeader.Set("Content-Type", "application/json; charset=UTF-8") - {{/addResponseHeaders}} - {{^addResponseHeaders}} - w.Header().Set("Content-Type", "application/json; charset=UTF-8") - {{/addResponseHeaders}} - if status != nil { - w.WriteHeader(*status) - } else { - w.WriteHeader(http.StatusOK) - } - - return json.NewEncoder(w).Encode(i) -} - // ReadFormFileToTempFile reads file data from a request form and writes it to a temporary file func ReadFormFileToTempFile(r *http.Request, key string) (*os.File, error) { _, fileHeader, err := r.FormFile(key) @@ -167,8 +141,8 @@ func readFileHeaderToTempFile(fileHeader *multipart.FileHeader) (*os.File, error return file, nil } -// parseInt64Parameter parses a string parameter to an int64. -func parseInt64Parameter(param string, required bool) (int64, error) { +// ParseInt64Parameter parses a string parameter to an int64. +func ParseInt64Parameter(param string, required bool) (int64, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -180,8 +154,8 @@ func parseInt64Parameter(param string, required bool) (int64, error) { return strconv.ParseInt(param, 10, 64) } -// parseInt32Parameter parses a string parameter to an int32. -func parseInt32Parameter(param string, required bool) (int32, error) { +// ParseInt32Parameter parses a string parameter to an int32. +func ParseInt32Parameter(param string, required bool) (int32, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -198,8 +172,8 @@ func parseInt32Parameter(param string, required bool) (int32, error) { return int32(val), nil } -// parseBoolParameter parses a string parameter to a bool -func parseBoolParameter(param string) (bool, error) { +// ParseBoolParameter parses a string parameter to a bool +func ParseBoolParameter(param string) (bool, error) { val, err := strconv.ParseBool(param) if err != nil { return false, err @@ -208,8 +182,8 @@ func parseBoolParameter(param string) (bool, error) { return bool(val), nil } -// parseInt64ArrayParameter parses a string parameter containing array of values to []int64. -func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { +// ParseInt64ArrayParameter parses a string parameter containing array of values to []int64. +func ParseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { if param == "" { if required { return nil, errors.New(errMsgRequiredMissing) @@ -232,8 +206,8 @@ func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, erro return ints, nil } -// parseInt32ArrayParameter parses a string parameter containing array of values to []int32. -func parseInt32ArrayParameter(param, delim string, required bool) ([]int32, error) { +// ParseInt32ArrayParameter parses a string parameter containing array of values to []int32. +func ParseInt32ArrayParameter(param, delim string, required bool) ([]int32, error) { if param == "" { if required { return nil, errors.New(errMsgRequiredMissing) @@ -254,4 +228,4 @@ func parseInt32ArrayParameter(param, delim string, required bool) ([]int32, erro } return ints, nil -} \ No newline at end of file +} diff --git a/modules/openapi-generator/src/main/resources/go-server/service.mustache b/modules/openapi-generator/src/main/resources/go-server/service.mustache index 7d51ad03e9c6..76a172fc1b19 100644 --- a/modules/openapi-generator/src/main/resources/go-server/service.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/service.mustache @@ -7,7 +7,8 @@ import ( "net/http"{{#imports}} "{{import}}"{{/imports}} - {{#hasDifferentModelDir}}models "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}} + "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/support" + {{#hasDifferentModelDir}}"{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}} ) // {{classname}}Service is a service that implements the logic for the {{classname}}Servicer @@ -25,21 +26,21 @@ func New{{classname}}Service() {{classname}}Servicer { {{#isDeprecated}} // Deprecated {{/isDeprecated}} -func (s *{{classname}}Service) {{nickname}}(ctx context.Context{{#allParams}}, {{paramName}} {{#isModel}}{{#hasDifferentModelDir}}models.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/allParams}}) (ImplResponse, error) { +func (s *{{classname}}Service) {{nickname}}(ctx context.Context{{#allParams}}, {{paramName}} {{#isArray}}[]{{/isArray}}{{#isArray}}{{#items}}{{#isModel}}{{#hasDifferentModelDir}}{{modelPackage}}.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/items}}{{/isArray}}{{^isArray}}{{#isModel}}{{#hasDifferentModelDir}}{{modelPackage}}.{{/hasDifferentModelDir}}{{/isModel}}{{dataType}}{{/isArray}}{{/allParams}}) (support.ImplResponse, error) { // TODO - update {{nickname}} with the required logic for this service method. // Add {{classFilename}}_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. {{#responses}} {{#dataType}} //TODO: Uncomment the next line to return response Response({{code}}, {{dataType}}{}) or use other options such as http.Ok ... - //return Response({{code}}, {{dataType}}{}), nil + //return support.Response({{code}}, {{dataType}}{}), nil {{/dataType}} {{^dataType}} //TODO: Uncomment the next line to return response Response({{code}}, {{dataType}}{}) or use other options such as http.Ok ... - //return Response({{code}}, nil),nil + //return support.Response({{code}}, nil),nil {{/dataType}} {{/responses}} - return Response(http.StatusNotImplemented, nil), errors.New("{{nickname}} method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("{{nickname}} method not implemented") }{{/operation}}{{/operations}} diff --git a/samples/server/petstore/go-api-server/.openapi-generator/FILES b/samples/server/petstore/go-api-server/.openapi-generator/FILES index bfddc1fc1400..d9579ff9142b 100644 --- a/samples/server/petstore/go-api-server/.openapi-generator/FILES +++ b/samples/server/petstore/go-api-server/.openapi-generator/FILES @@ -10,15 +10,15 @@ go/api_store.go go/api_store_service.go go/api_user.go go/api_user_service.go -go/error.go -go/helpers.go -go/impl.go -go/logger.go go/model_api_response.go go/model_category.go go/model_order.go go/model_pet.go go/model_tag.go go/model_user.go -go/routers.go main.go +support/error.go +support/helpers.go +support/impl.go +support/logger.go +support/routers.go 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 f1db89f6ae1a..81551da09389 100644 --- a/samples/server/petstore/go-api-server/go/api_pet.go +++ b/samples/server/petstore/go-api-server/go/api_pet.go @@ -10,36 +10,36 @@ package petstoreserver import ( - "encoding/json" "net/http" "strings" "github.com/gorilla/mux" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) // PetApiController binds http requests to an api service and writes the service results to the http response type PetApiController struct { service PetApiServicer - errorHandler ErrorHandler + errorHandler support.ErrorHandler } // PetApiOption for how the controller is set up. type PetApiOption func(*PetApiController) // WithPetApiErrorHandler inject ErrorHandler into controller -func WithPetApiErrorHandler(h ErrorHandler) PetApiOption { +func WithPetApiErrorHandler(h support.ErrorHandler) PetApiOption { return func(c *PetApiController) { c.errorHandler = h } } // NewPetApiController creates a default api controller -func NewPetApiController(s PetApiServicer, opts ...PetApiOption) Router { +func NewPetApiController(s PetApiServicer, opts ...PetApiOption) support.Router { controller := &PetApiController{ service: s, - errorHandler: DefaultErrorHandler, + errorHandler: support.DefaultErrorHandler, } for _, opt := range opts { @@ -50,8 +50,8 @@ func NewPetApiController(s PetApiServicer, opts ...PetApiOption) Router { } // Routes returns all the api routes for the PetApiController -func (c *PetApiController) Routes() Routes { - return Routes{ +func (c *PetApiController) Routes() support.Routes { + return support.Routes{ { "AddPet", strings.ToUpper("Post"), @@ -106,10 +106,10 @@ func (c *PetApiController) Routes() Routes { // AddPet - Add a new pet to the store func (c *PetApiController) AddPet(w http.ResponseWriter, r *http.Request) { petParam := Pet{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&petParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertPetRequired(petParam); err != nil { @@ -123,16 +123,16 @@ func (c *PetApiController) AddPet(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // DeletePet - Deletes a pet func (c *PetApiController) DeletePet(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) - petIdParam, err := parseInt64Parameter(params["petId"], true) + petIdParam, err := support.ParseInt64Parameter(params["petId"], true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } @@ -144,7 +144,7 @@ func (c *PetApiController) DeletePet(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -159,7 +159,7 @@ func (c *PetApiController) FindPetsByStatus(w http.ResponseWriter, r *http.Reque return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -175,16 +175,16 @@ func (c *PetApiController) FindPetsByTags(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // GetPetById - Find pet by ID func (c *PetApiController) GetPetById(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) - petIdParam, err := parseInt64Parameter(params["petId"], true) + petIdParam, err := support.ParseInt64Parameter(params["petId"], true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } @@ -195,17 +195,17 @@ func (c *PetApiController) GetPetById(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // UpdatePet - Update an existing pet func (c *PetApiController) UpdatePet(w http.ResponseWriter, r *http.Request) { petParam := Pet{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&petParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertPetRequired(petParam); err != nil { @@ -219,20 +219,20 @@ func (c *PetApiController) UpdatePet(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // UpdatePetWithForm - Updates a pet in the store with form data func (c *PetApiController) UpdatePetWithForm(w http.ResponseWriter, r *http.Request) { if err := r.ParseForm(); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } params := mux.Vars(r) - petIdParam, err := parseInt64Parameter(params["petId"], true) + petIdParam, err := support.ParseInt64Parameter(params["petId"], true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } @@ -245,28 +245,28 @@ func (c *PetApiController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // UploadFile - uploads an image func (c *PetApiController) UploadFile(w http.ResponseWriter, r *http.Request) { if err := r.ParseMultipartForm(32 << 20); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } params := mux.Vars(r) - petIdParam, err := parseInt64Parameter(params["petId"], true) + petIdParam, err := support.ParseInt64Parameter(params["petId"], true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } additionalMetadataParam := r.FormValue("additionalMetadata") - fileParam, err := ReadFormFileToTempFile(r, "file") + fileParam, err := support.ReadFormFileToTempFile(r, "file") if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } result, err := c.service.UploadFile(r.Context(), petIdParam, additionalMetadataParam, fileParam) @@ -276,6 +276,6 @@ func (c *PetApiController) UploadFile(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } diff --git a/samples/server/petstore/go-api-server/go/api_pet_service.go b/samples/server/petstore/go-api-server/go/api_pet_service.go index 270abe21cb18..02a73080f808 100644 --- a/samples/server/petstore/go-api-server/go/api_pet_service.go +++ b/samples/server/petstore/go-api-server/go/api_pet_service.go @@ -15,6 +15,7 @@ import ( "net/http" "os" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) @@ -30,114 +31,114 @@ func NewPetApiService() PetApiServicer { } // AddPet - Add a new pet to the store -func (s *PetApiService) AddPet(ctx context.Context, pet Pet) (ImplResponse, error) { +func (s *PetApiService) AddPet(ctx context.Context, pet Pet) (support.ImplResponse, error) { // TODO - update AddPet with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Pet{}) or use other options such as http.Ok ... - //return Response(200, Pet{}), nil + //return support.Response(200, Pet{}), nil //TODO: Uncomment the next line to return response Response(405, {}) or use other options such as http.Ok ... - //return Response(405, nil),nil + //return support.Response(405, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("AddPet method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("AddPet method not implemented") } // DeletePet - Deletes a pet -func (s *PetApiService) DeletePet(ctx context.Context, petId int64, apiKey string) (ImplResponse, error) { +func (s *PetApiService) DeletePet(ctx context.Context, petId int64, apiKey string) (support.ImplResponse, error) { // TODO - update DeletePet with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("DeletePet method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("DeletePet method not implemented") } // FindPetsByStatus - Finds Pets by status -func (s *PetApiService) FindPetsByStatus(ctx context.Context, status []string) (ImplResponse, error) { +func (s *PetApiService) FindPetsByStatus(ctx context.Context, status []string) (support.ImplResponse, error) { // TODO - update FindPetsByStatus with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, []Pet{}) or use other options such as http.Ok ... - //return Response(200, []Pet{}), nil + //return support.Response(200, []Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("FindPetsByStatus method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("FindPetsByStatus method not implemented") } // FindPetsByTags - Finds Pets by tags // Deprecated -func (s *PetApiService) FindPetsByTags(ctx context.Context, tags []string) (ImplResponse, error) { +func (s *PetApiService) FindPetsByTags(ctx context.Context, tags []string) (support.ImplResponse, error) { // TODO - update FindPetsByTags with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, []Pet{}) or use other options such as http.Ok ... - //return Response(200, []Pet{}), nil + //return support.Response(200, []Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("FindPetsByTags method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("FindPetsByTags method not implemented") } // GetPetById - Find pet by ID -func (s *PetApiService) GetPetById(ctx context.Context, petId int64) (ImplResponse, error) { +func (s *PetApiService) GetPetById(ctx context.Context, petId int64) (support.ImplResponse, error) { // TODO - update GetPetById with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Pet{}) or use other options such as http.Ok ... - //return Response(200, Pet{}), nil + //return support.Response(200, Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("GetPetById method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetPetById method not implemented") } // UpdatePet - Update an existing pet -func (s *PetApiService) UpdatePet(ctx context.Context, pet Pet) (ImplResponse, error) { +func (s *PetApiService) UpdatePet(ctx context.Context, pet Pet) (support.ImplResponse, error) { // TODO - update UpdatePet with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Pet{}) or use other options such as http.Ok ... - //return Response(200, Pet{}), nil + //return support.Response(200, Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil //TODO: Uncomment the next line to return response Response(405, {}) or use other options such as http.Ok ... - //return Response(405, nil),nil + //return support.Response(405, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("UpdatePet method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UpdatePet method not implemented") } // UpdatePetWithForm - Updates a pet in the store with form data -func (s *PetApiService) UpdatePetWithForm(ctx context.Context, petId int64, name string, status string) (ImplResponse, error) { +func (s *PetApiService) UpdatePetWithForm(ctx context.Context, petId int64, name string, status string) (support.ImplResponse, error) { // TODO - update UpdatePetWithForm with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(405, {}) or use other options such as http.Ok ... - //return Response(405, nil),nil + //return support.Response(405, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("UpdatePetWithForm method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UpdatePetWithForm method not implemented") } // UploadFile - uploads an image -func (s *PetApiService) UploadFile(ctx context.Context, petId int64, additionalMetadata string, file *os.File) (ImplResponse, error) { +func (s *PetApiService) UploadFile(ctx context.Context, petId int64, additionalMetadata string, file *os.File) (support.ImplResponse, error) { // TODO - update UploadFile with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, ApiResponse{}) or use other options such as http.Ok ... - //return Response(200, ApiResponse{}), nil + //return support.Response(200, ApiResponse{}), nil - return Response(http.StatusNotImplemented, nil), errors.New("UploadFile method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UploadFile method not implemented") } 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 84c4d8e3f700..7811356b29fd 100644 --- a/samples/server/petstore/go-api-server/go/api_store.go +++ b/samples/server/petstore/go-api-server/go/api_store.go @@ -10,36 +10,36 @@ package petstoreserver import ( - "encoding/json" "net/http" "strings" "github.com/gorilla/mux" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) // StoreApiController binds http requests to an api service and writes the service results to the http response type StoreApiController struct { service StoreApiServicer - errorHandler ErrorHandler + errorHandler support.ErrorHandler } // StoreApiOption for how the controller is set up. type StoreApiOption func(*StoreApiController) // WithStoreApiErrorHandler inject ErrorHandler into controller -func WithStoreApiErrorHandler(h ErrorHandler) StoreApiOption { +func WithStoreApiErrorHandler(h support.ErrorHandler) StoreApiOption { return func(c *StoreApiController) { c.errorHandler = h } } // NewStoreApiController creates a default api controller -func NewStoreApiController(s StoreApiServicer, opts ...StoreApiOption) Router { +func NewStoreApiController(s StoreApiServicer, opts ...StoreApiOption) support.Router { controller := &StoreApiController{ service: s, - errorHandler: DefaultErrorHandler, + errorHandler: support.DefaultErrorHandler, } for _, opt := range opts { @@ -50,8 +50,8 @@ func NewStoreApiController(s StoreApiServicer, opts ...StoreApiOption) Router { } // Routes returns all the api routes for the StoreApiController -func (c *StoreApiController) Routes() Routes { - return Routes{ +func (c *StoreApiController) Routes() support.Routes { + return support.Routes{ { "DeleteOrder", strings.ToUpper("Delete"), @@ -91,7 +91,7 @@ func (c *StoreApiController) DeleteOrder(w http.ResponseWriter, r *http.Request) return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -104,16 +104,16 @@ func (c *StoreApiController) GetInventory(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // GetOrderById - Find purchase order by ID func (c *StoreApiController) GetOrderById(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) - orderIdParam, err := parseInt64Parameter(params["orderId"], true) + orderIdParam, err := support.ParseInt64Parameter(params["orderId"], true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } @@ -124,17 +124,17 @@ func (c *StoreApiController) GetOrderById(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // PlaceOrder - Place an order for a pet func (c *StoreApiController) PlaceOrder(w http.ResponseWriter, r *http.Request) { orderParam := Order{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&orderParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertOrderRequired(orderParam); err != nil { @@ -148,6 +148,6 @@ func (c *StoreApiController) PlaceOrder(w http.ResponseWriter, r *http.Request) return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } diff --git a/samples/server/petstore/go-api-server/go/api_store_service.go b/samples/server/petstore/go-api-server/go/api_store_service.go index 7fde482675b6..62044deb2218 100644 --- a/samples/server/petstore/go-api-server/go/api_store_service.go +++ b/samples/server/petstore/go-api-server/go/api_store_service.go @@ -14,6 +14,7 @@ import ( "errors" "net/http" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) @@ -29,57 +30,57 @@ func NewStoreApiService() StoreApiServicer { } // DeleteOrder - Delete purchase order by ID -func (s *StoreApiService) DeleteOrder(ctx context.Context, orderId string) (ImplResponse, error) { +func (s *StoreApiService) DeleteOrder(ctx context.Context, orderId string) (support.ImplResponse, error) { // TODO - update DeleteOrder with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("DeleteOrder method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("DeleteOrder method not implemented") } // GetInventory - Returns pet inventories by status -func (s *StoreApiService) GetInventory(ctx context.Context) (ImplResponse, error) { +func (s *StoreApiService) GetInventory(ctx context.Context) (support.ImplResponse, error) { // TODO - update GetInventory with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, map[string]int32{}) or use other options such as http.Ok ... - //return Response(200, map[string]int32{}), nil + //return support.Response(200, map[string]int32{}), nil - return Response(http.StatusNotImplemented, nil), errors.New("GetInventory method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetInventory method not implemented") } // GetOrderById - Find purchase order by ID -func (s *StoreApiService) GetOrderById(ctx context.Context, orderId int64) (ImplResponse, error) { +func (s *StoreApiService) GetOrderById(ctx context.Context, orderId int64) (support.ImplResponse, error) { // TODO - update GetOrderById with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Order{}) or use other options such as http.Ok ... - //return Response(200, Order{}), nil + //return support.Response(200, Order{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("GetOrderById method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetOrderById method not implemented") } // PlaceOrder - Place an order for a pet -func (s *StoreApiService) PlaceOrder(ctx context.Context, order Order) (ImplResponse, error) { +func (s *StoreApiService) PlaceOrder(ctx context.Context, order Order) (support.ImplResponse, error) { // TODO - update PlaceOrder with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Order{}) or use other options such as http.Ok ... - //return Response(200, Order{}), nil + //return support.Response(200, Order{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("PlaceOrder method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("PlaceOrder method not implemented") } diff --git a/samples/server/petstore/go-api-server/go/api_user.go b/samples/server/petstore/go-api-server/go/api_user.go index 786497dcb521..3aca203c64af 100644 --- a/samples/server/petstore/go-api-server/go/api_user.go +++ b/samples/server/petstore/go-api-server/go/api_user.go @@ -10,36 +10,36 @@ package petstoreserver import ( - "encoding/json" "net/http" "strings" "github.com/gorilla/mux" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) // UserApiController binds http requests to an api service and writes the service results to the http response type UserApiController struct { service UserApiServicer - errorHandler ErrorHandler + errorHandler support.ErrorHandler } // UserApiOption for how the controller is set up. type UserApiOption func(*UserApiController) // WithUserApiErrorHandler inject ErrorHandler into controller -func WithUserApiErrorHandler(h ErrorHandler) UserApiOption { +func WithUserApiErrorHandler(h support.ErrorHandler) UserApiOption { return func(c *UserApiController) { c.errorHandler = h } } // NewUserApiController creates a default api controller -func NewUserApiController(s UserApiServicer, opts ...UserApiOption) Router { +func NewUserApiController(s UserApiServicer, opts ...UserApiOption) support.Router { controller := &UserApiController{ service: s, - errorHandler: DefaultErrorHandler, + errorHandler: support.DefaultErrorHandler, } for _, opt := range opts { @@ -50,8 +50,8 @@ func NewUserApiController(s UserApiServicer, opts ...UserApiOption) Router { } // Routes returns all the api routes for the UserApiController -func (c *UserApiController) Routes() Routes { - return Routes{ +func (c *UserApiController) Routes() support.Routes { + return support.Routes{ { "CreateUser", strings.ToUpper("Post"), @@ -106,10 +106,10 @@ func (c *UserApiController) Routes() Routes { // CreateUser - Create user func (c *UserApiController) CreateUser(w http.ResponseWriter, r *http.Request) { userParam := User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertUserRequired(userParam); err != nil { @@ -123,17 +123,17 @@ func (c *UserApiController) CreateUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // CreateUsersWithArrayInput - Creates list of users with given input array func (c *UserApiController) CreateUsersWithArrayInput(w http.ResponseWriter, r *http.Request) { userParam := []User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } for _, el := range userParam { @@ -149,17 +149,17 @@ func (c *UserApiController) CreateUsersWithArrayInput(w http.ResponseWriter, r * return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // CreateUsersWithListInput - Creates list of users with given input array func (c *UserApiController) CreateUsersWithListInput(w http.ResponseWriter, r *http.Request) { userParam := []User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } for _, el := range userParam { @@ -175,7 +175,7 @@ func (c *UserApiController) CreateUsersWithListInput(w http.ResponseWriter, r *h return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -191,7 +191,7 @@ func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -207,7 +207,7 @@ func (c *UserApiController) GetUserByName(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -223,7 +223,7 @@ func (c *UserApiController) LoginUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -236,7 +236,7 @@ func (c *UserApiController) LogoutUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -246,10 +246,10 @@ func (c *UserApiController) UpdateUser(w http.ResponseWriter, r *http.Request) { usernameParam := params["username"] userParam := User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertUserRequired(userParam); err != nil { @@ -263,6 +263,6 @@ func (c *UserApiController) UpdateUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } diff --git a/samples/server/petstore/go-api-server/go/api_user_service.go b/samples/server/petstore/go-api-server/go/api_user_service.go index 4bf2327c5a05..d24f3c6084c0 100644 --- a/samples/server/petstore/go-api-server/go/api_user_service.go +++ b/samples/server/petstore/go-api-server/go/api_user_service.go @@ -14,6 +14,7 @@ import ( "errors" "net/http" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) @@ -29,104 +30,104 @@ func NewUserApiService() UserApiServicer { } // CreateUser - Create user -func (s *UserApiService) CreateUser(ctx context.Context, user User) (ImplResponse, error) { +func (s *UserApiService) CreateUser(ctx context.Context, user User) (support.ImplResponse, error) { // TODO - update CreateUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("CreateUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("CreateUser method not implemented") } // CreateUsersWithArrayInput - Creates list of users with given input array -func (s *UserApiService) CreateUsersWithArrayInput(ctx context.Context, user []User) (ImplResponse, error) { +func (s *UserApiService) CreateUsersWithArrayInput(ctx context.Context, user []User) (support.ImplResponse, error) { // TODO - update CreateUsersWithArrayInput with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithArrayInput method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithArrayInput method not implemented") } // CreateUsersWithListInput - Creates list of users with given input array -func (s *UserApiService) CreateUsersWithListInput(ctx context.Context, user []User) (ImplResponse, error) { +func (s *UserApiService) CreateUsersWithListInput(ctx context.Context, user []User) (support.ImplResponse, error) { // TODO - update CreateUsersWithListInput with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithListInput method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithListInput method not implemented") } // DeleteUser - Delete user -func (s *UserApiService) DeleteUser(ctx context.Context, username string) (ImplResponse, error) { +func (s *UserApiService) DeleteUser(ctx context.Context, username string) (support.ImplResponse, error) { // TODO - update DeleteUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("DeleteUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("DeleteUser method not implemented") } // GetUserByName - Get user by user name -func (s *UserApiService) GetUserByName(ctx context.Context, username string) (ImplResponse, error) { +func (s *UserApiService) GetUserByName(ctx context.Context, username string) (support.ImplResponse, error) { // TODO - update GetUserByName with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, User{}) or use other options such as http.Ok ... - //return Response(200, User{}), nil + //return support.Response(200, User{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("GetUserByName method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetUserByName method not implemented") } // LoginUser - Logs user into the system -func (s *UserApiService) LoginUser(ctx context.Context, username string, password string) (ImplResponse, error) { +func (s *UserApiService) LoginUser(ctx context.Context, username string, password string) (support.ImplResponse, error) { // TODO - update LoginUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, string{}) or use other options such as http.Ok ... - //return Response(200, string{}), nil + //return support.Response(200, string{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("LoginUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("LoginUser method not implemented") } // LogoutUser - Logs out current logged in user session -func (s *UserApiService) LogoutUser(ctx context.Context) (ImplResponse, error) { +func (s *UserApiService) LogoutUser(ctx context.Context) (support.ImplResponse, error) { // TODO - update LogoutUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("LogoutUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("LogoutUser method not implemented") } // UpdateUser - Updated user -func (s *UserApiService) UpdateUser(ctx context.Context, username string, user User) (ImplResponse, error) { +func (s *UserApiService) UpdateUser(ctx context.Context, username string, user User) (support.ImplResponse, error) { // TODO - update UpdateUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("UpdateUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UpdateUser method not implemented") } diff --git a/samples/server/petstore/go-api-server/go/model_api_response.go b/samples/server/petstore/go-api-server/go/model_api_response.go index 324cfbe08444..37b1391b3200 100644 --- a/samples/server/petstore/go-api-server/go/model_api_response.go +++ b/samples/server/petstore/go-api-server/go/model_api_response.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // ApiResponse - Describes the result of uploading an image resource type ApiResponse struct { @@ -27,10 +31,10 @@ func AssertApiResponseRequired(obj ApiResponse) error { // AssertRecurseApiResponseRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of ApiResponse (e.g. [][]ApiResponse), otherwise ErrTypeAssertionError is thrown. func AssertRecurseApiResponseRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aApiResponse, ok := obj.(ApiResponse) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertApiResponseRequired(aApiResponse) }) diff --git a/samples/server/petstore/go-api-server/go/model_category.go b/samples/server/petstore/go-api-server/go/model_category.go index 3ae01892a3fc..b742f6629e83 100644 --- a/samples/server/petstore/go-api-server/go/model_category.go +++ b/samples/server/petstore/go-api-server/go/model_category.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // Category - A category for a pet type Category struct { @@ -25,10 +29,10 @@ func AssertCategoryRequired(obj Category) error { // AssertRecurseCategoryRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Category (e.g. [][]Category), otherwise ErrTypeAssertionError is thrown. func AssertRecurseCategoryRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aCategory, ok := obj.(Category) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertCategoryRequired(aCategory) }) diff --git a/samples/server/petstore/go-api-server/go/model_order.go b/samples/server/petstore/go-api-server/go/model_order.go index 80ecfea3dc7f..d0d11d434d0a 100644 --- a/samples/server/petstore/go-api-server/go/model_order.go +++ b/samples/server/petstore/go-api-server/go/model_order.go @@ -8,9 +8,9 @@ */ package petstoreserver - import ( "time" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) // Order - An order for a pets from the pet store @@ -38,10 +38,10 @@ func AssertOrderRequired(obj Order) error { // AssertRecurseOrderRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Order (e.g. [][]Order), otherwise ErrTypeAssertionError is thrown. func AssertRecurseOrderRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aOrder, ok := obj.(Order) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertOrderRequired(aOrder) }) diff --git a/samples/server/petstore/go-api-server/go/model_pet.go b/samples/server/petstore/go-api-server/go/model_pet.go index 8e3dc7ad66f1..9dab6f10be93 100644 --- a/samples/server/petstore/go-api-server/go/model_pet.go +++ b/samples/server/petstore/go-api-server/go/model_pet.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // Pet - A pet for sale in the pet store type Pet struct { @@ -34,8 +38,8 @@ func AssertPetRequired(obj Pet) error { "photoUrls": obj.PhotoUrls, } for name, el := range elements { - if isZero := IsZeroValue(el); isZero { - return &RequiredError{Field: name} + if isZero := support.IsZeroValue(el); isZero { + return &support.RequiredError{Field: name} } } @@ -53,10 +57,10 @@ func AssertPetRequired(obj Pet) error { // AssertRecursePetRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Pet (e.g. [][]Pet), otherwise ErrTypeAssertionError is thrown. func AssertRecursePetRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aPet, ok := obj.(Pet) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertPetRequired(aPet) }) diff --git a/samples/server/petstore/go-api-server/go/model_tag.go b/samples/server/petstore/go-api-server/go/model_tag.go index 0631ccc4866f..9a442e48b2ec 100644 --- a/samples/server/petstore/go-api-server/go/model_tag.go +++ b/samples/server/petstore/go-api-server/go/model_tag.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // Tag - A tag for a pet type Tag struct { @@ -25,10 +29,10 @@ func AssertTagRequired(obj Tag) error { // AssertRecurseTagRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Tag (e.g. [][]Tag), otherwise ErrTypeAssertionError is thrown. func AssertRecurseTagRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aTag, ok := obj.(Tag) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertTagRequired(aTag) }) diff --git a/samples/server/petstore/go-api-server/go/model_user.go b/samples/server/petstore/go-api-server/go/model_user.go index 83ac114e3c59..a52e4d55560a 100644 --- a/samples/server/petstore/go-api-server/go/model_user.go +++ b/samples/server/petstore/go-api-server/go/model_user.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // User - A User who is purchasing from the pet store type User struct { @@ -38,10 +42,10 @@ func AssertUserRequired(obj User) error { // AssertRecurseUserRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of User (e.g. [][]User), otherwise ErrTypeAssertionError is thrown. func AssertRecurseUserRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aUser, ok := obj.(User) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertUserRequired(aUser) }) diff --git a/samples/server/petstore/go-api-server/main.go b/samples/server/petstore/go-api-server/main.go index ddc5258297ca..7b22919e9839 100644 --- a/samples/server/petstore/go-api-server/main.go +++ b/samples/server/petstore/go-api-server/main.go @@ -14,6 +14,7 @@ import ( "net/http" petstoreserver "github.com/GIT_USER_ID/GIT_REPO_ID/go" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) func main() { @@ -28,7 +29,7 @@ func main() { UserApiService := petstoreserver.NewUserApiService() UserApiController := petstoreserver.NewUserApiController(UserApiService) - router := petstoreserver.NewRouter(PetApiController, StoreApiController, UserApiController) + router := support.NewRouter(PetApiController, StoreApiController, UserApiController) log.Fatal(http.ListenAndServe(":8080", router)) } diff --git a/samples/server/petstore/go-api-server/go/error.go b/samples/server/petstore/go-api-server/support/error.go similarity index 98% rename from samples/server/petstore/go-api-server/go/error.go rename to samples/server/petstore/go-api-server/support/error.go index 2c0b010fe8da..e9c4795ffe3e 100644 --- a/samples/server/petstore/go-api-server/go/error.go +++ b/samples/server/petstore/go-api-server/support/error.go @@ -7,7 +7,7 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( "errors" diff --git a/samples/server/petstore/go-chi-server/go/helpers.go b/samples/server/petstore/go-api-server/support/helpers.go similarity index 70% rename from samples/server/petstore/go-chi-server/go/helpers.go rename to samples/server/petstore/go-api-server/support/helpers.go index f18a261018dd..ce5dcce4819e 100644 --- a/samples/server/petstore/go-chi-server/go/helpers.go +++ b/samples/server/petstore/go-api-server/support/helpers.go @@ -7,9 +7,12 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( + "encoding/json" + "net/http" + "io" "reflect" ) @@ -62,3 +65,28 @@ func AssertRecurseValueRequired(value reflect.Value, callback func(interface{}) } return nil } + +// EncodeJSONResponse uses the json encoder to write an interface to the http response with an optional status code +func EncodeJSONResponse(i interface{}, status *int, headers map[string][]string, w http.ResponseWriter) error { + wHeader := w.Header() + if headers != nil { + for key, values := range headers { + for _, value := range values { + wHeader.Add(key, value) + } + } + } + wHeader.Set("Content-Type", "application/json; charset=UTF-8") + if status != nil { + w.WriteHeader(*status) + } else { + w.WriteHeader(http.StatusOK) + } + + return json.NewEncoder(w).Encode(i) +} + +// NewJSONDecoder creates a jew json decoder to decode an http body. +func NewJSONDecoder(r io.Reader) *json.Decoder { + return json.NewDecoder(r) +} diff --git a/samples/server/petstore/go-chi-server/go/impl.go b/samples/server/petstore/go-api-server/support/impl.go similarity index 94% rename from samples/server/petstore/go-chi-server/go/impl.go rename to samples/server/petstore/go-api-server/support/impl.go index 8c72e26a342a..54db797feb04 100644 --- a/samples/server/petstore/go-chi-server/go/impl.go +++ b/samples/server/petstore/go-api-server/support/impl.go @@ -7,7 +7,7 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support // ImplResponse response defines an error code with the associated body type ImplResponse struct { diff --git a/samples/server/petstore/go-server-required/go/logger.go b/samples/server/petstore/go-api-server/support/logger.go similarity index 96% rename from samples/server/petstore/go-server-required/go/logger.go rename to samples/server/petstore/go-api-server/support/logger.go index 08cc0ea3f1d2..cb27ef95fd71 100644 --- a/samples/server/petstore/go-server-required/go/logger.go +++ b/samples/server/petstore/go-api-server/support/logger.go @@ -7,7 +7,7 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( "log" diff --git a/samples/server/petstore/go-api-server/go/routers.go b/samples/server/petstore/go-api-server/support/routers.go similarity index 75% rename from samples/server/petstore/go-api-server/go/routers.go rename to samples/server/petstore/go-api-server/support/routers.go index 2b34778c5a1b..76e0a071652a 100644 --- a/samples/server/petstore/go-api-server/go/routers.go +++ b/samples/server/petstore/go-api-server/support/routers.go @@ -7,10 +7,9 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( - "encoding/json" "errors" "github.com/gorilla/mux" "io/ioutil" @@ -59,26 +58,6 @@ func NewRouter(routers ...Router) *mux.Router { return router } -// EncodeJSONResponse uses the json encoder to write an interface to the http response with an optional status code -func EncodeJSONResponse(i interface{}, status *int, headers map[string][]string, w http.ResponseWriter) error { - wHeader := w.Header() - if headers != nil { - for key, values := range headers { - for _, value := range values { - wHeader.Add(key, value) - } - } - } - wHeader.Set("Content-Type", "application/json; charset=UTF-8") - if status != nil { - w.WriteHeader(*status) - } else { - w.WriteHeader(http.StatusOK) - } - - return json.NewEncoder(w).Encode(i) -} - // ReadFormFileToTempFile reads file data from a request form and writes it to a temporary file func ReadFormFileToTempFile(r *http.Request, key string) (*os.File, error) { _, fileHeader, err := r.FormFile(key) @@ -135,8 +114,8 @@ func readFileHeaderToTempFile(fileHeader *multipart.FileHeader) (*os.File, error return file, nil } -// parseInt64Parameter parses a string parameter to an int64. -func parseInt64Parameter(param string, required bool) (int64, error) { +// ParseInt64Parameter parses a string parameter to an int64. +func ParseInt64Parameter(param string, required bool) (int64, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -148,8 +127,8 @@ func parseInt64Parameter(param string, required bool) (int64, error) { return strconv.ParseInt(param, 10, 64) } -// parseInt32Parameter parses a string parameter to an int32. -func parseInt32Parameter(param string, required bool) (int32, error) { +// ParseInt32Parameter parses a string parameter to an int32. +func ParseInt32Parameter(param string, required bool) (int32, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -166,8 +145,8 @@ func parseInt32Parameter(param string, required bool) (int32, error) { return int32(val), nil } -// parseBoolParameter parses a string parameter to a bool -func parseBoolParameter(param string) (bool, error) { +// ParseBoolParameter parses a string parameter to a bool +func ParseBoolParameter(param string) (bool, error) { val, err := strconv.ParseBool(param) if err != nil { return false, err @@ -176,8 +155,8 @@ func parseBoolParameter(param string) (bool, error) { return bool(val), nil } -// parseInt64ArrayParameter parses a string parameter containing array of values to []int64. -func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { +// ParseInt64ArrayParameter parses a string parameter containing array of values to []int64. +func ParseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { if param == "" { if required { return nil, errors.New(errMsgRequiredMissing) @@ -200,8 +179,8 @@ func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, erro return ints, nil } -// parseInt32ArrayParameter parses a string parameter containing array of values to []int32. -func parseInt32ArrayParameter(param, delim string, required bool) ([]int32, error) { +// ParseInt32ArrayParameter parses a string parameter containing array of values to []int32. +func ParseInt32ArrayParameter(param, delim string, required bool) ([]int32, error) { if param == "" { if required { return nil, errors.New(errMsgRequiredMissing) @@ -222,4 +201,4 @@ func parseInt32ArrayParameter(param, delim string, required bool) ([]int32, erro } return ints, nil -} \ No newline at end of file +} diff --git a/samples/server/petstore/go-chi-server/.openapi-generator/FILES b/samples/server/petstore/go-chi-server/.openapi-generator/FILES index bfddc1fc1400..d9579ff9142b 100644 --- a/samples/server/petstore/go-chi-server/.openapi-generator/FILES +++ b/samples/server/petstore/go-chi-server/.openapi-generator/FILES @@ -10,15 +10,15 @@ go/api_store.go go/api_store_service.go go/api_user.go go/api_user_service.go -go/error.go -go/helpers.go -go/impl.go -go/logger.go go/model_api_response.go go/model_category.go go/model_order.go go/model_pet.go go/model_tag.go go/model_user.go -go/routers.go main.go +support/error.go +support/helpers.go +support/impl.go +support/logger.go +support/routers.go diff --git a/samples/server/petstore/go-chi-server/go/api.go b/samples/server/petstore/go-chi-server/go/api.go index 38d39999266a..fb480bc1e163 100644 --- a/samples/server/petstore/go-chi-server/go/api.go +++ b/samples/server/petstore/go-chi-server/go/api.go @@ -14,10 +14,13 @@ import ( "net/http" "os" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) @@ -66,15 +69,15 @@ type UserApiRouter interface { // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. type PetApiServicer interface { - AddPet(context.Context, Pet) (ImplResponse, error) - DeletePet(context.Context, int64, string) (ImplResponse, error) - FindPetsByStatus(context.Context, []string) (ImplResponse, error) + AddPet(context.Context, Pet) (support.ImplResponse, error) + DeletePet(context.Context, int64, string) (support.ImplResponse, error) + FindPetsByStatus(context.Context, []string) (support.ImplResponse, error) // Deprecated - FindPetsByTags(context.Context, []string) (ImplResponse, error) - GetPetById(context.Context, int64) (ImplResponse, error) - UpdatePet(context.Context, Pet) (ImplResponse, error) - UpdatePetWithForm(context.Context, int64, string, string) (ImplResponse, error) - UploadFile(context.Context, int64, string, *os.File) (ImplResponse, error) + FindPetsByTags(context.Context, []string) (support.ImplResponse, error) + GetPetById(context.Context, int64) (support.ImplResponse, error) + UpdatePet(context.Context, Pet) (support.ImplResponse, error) + UpdatePetWithForm(context.Context, int64, string, string) (support.ImplResponse, error) + UploadFile(context.Context, int64, string, *os.File) (support.ImplResponse, error) } @@ -83,10 +86,10 @@ type PetApiServicer interface { // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. type StoreApiServicer interface { - DeleteOrder(context.Context, string) (ImplResponse, error) - GetInventory(context.Context) (ImplResponse, error) - GetOrderById(context.Context, int64) (ImplResponse, error) - PlaceOrder(context.Context, Order) (ImplResponse, error) + DeleteOrder(context.Context, string) (support.ImplResponse, error) + GetInventory(context.Context) (support.ImplResponse, error) + GetOrderById(context.Context, int64) (support.ImplResponse, error) + PlaceOrder(context.Context, Order) (support.ImplResponse, error) } @@ -95,12 +98,12 @@ type StoreApiServicer interface { // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. type UserApiServicer interface { - CreateUser(context.Context, User) (ImplResponse, error) - CreateUsersWithArrayInput(context.Context, []User) (ImplResponse, error) - CreateUsersWithListInput(context.Context, []User) (ImplResponse, error) - DeleteUser(context.Context, string) (ImplResponse, error) - GetUserByName(context.Context, string) (ImplResponse, error) - LoginUser(context.Context, string, string) (ImplResponse, error) - LogoutUser(context.Context) (ImplResponse, error) - UpdateUser(context.Context, string, User) (ImplResponse, error) + CreateUser(context.Context, User) (support.ImplResponse, error) + CreateUsersWithArrayInput(context.Context, []User) (support.ImplResponse, error) + CreateUsersWithListInput(context.Context, []User) (support.ImplResponse, error) + DeleteUser(context.Context, string) (support.ImplResponse, error) + GetUserByName(context.Context, string) (support.ImplResponse, error) + LoginUser(context.Context, string, string) (support.ImplResponse, error) + LogoutUser(context.Context) (support.ImplResponse, error) + UpdateUser(context.Context, string, User) (support.ImplResponse, error) } diff --git a/samples/server/petstore/go-chi-server/go/api_pet.go b/samples/server/petstore/go-chi-server/go/api_pet.go index 12a2b71fa3ba..067d7534e7f3 100644 --- a/samples/server/petstore/go-chi-server/go/api_pet.go +++ b/samples/server/petstore/go-chi-server/go/api_pet.go @@ -10,36 +10,36 @@ package petstoreserver import ( - "encoding/json" "net/http" "strings" "github.com/go-chi/chi/v5" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) // PetApiController binds http requests to an api service and writes the service results to the http response type PetApiController struct { service PetApiServicer - errorHandler ErrorHandler + errorHandler support.ErrorHandler } // PetApiOption for how the controller is set up. type PetApiOption func(*PetApiController) // WithPetApiErrorHandler inject ErrorHandler into controller -func WithPetApiErrorHandler(h ErrorHandler) PetApiOption { +func WithPetApiErrorHandler(h support.ErrorHandler) PetApiOption { return func(c *PetApiController) { c.errorHandler = h } } // NewPetApiController creates a default api controller -func NewPetApiController(s PetApiServicer, opts ...PetApiOption) Router { +func NewPetApiController(s PetApiServicer, opts ...PetApiOption) support.Router { controller := &PetApiController{ service: s, - errorHandler: DefaultErrorHandler, + errorHandler: support.DefaultErrorHandler, } for _, opt := range opts { @@ -50,8 +50,8 @@ func NewPetApiController(s PetApiServicer, opts ...PetApiOption) Router { } // Routes returns all the api routes for the PetApiController -func (c *PetApiController) Routes() Routes { - return Routes{ +func (c *PetApiController) Routes() support.Routes { + return support.Routes{ { "AddPet", strings.ToUpper("Post"), @@ -106,10 +106,10 @@ func (c *PetApiController) Routes() Routes { // AddPet - Add a new pet to the store func (c *PetApiController) AddPet(w http.ResponseWriter, r *http.Request) { petParam := Pet{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&petParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertPetRequired(petParam); err != nil { @@ -123,15 +123,15 @@ func (c *PetApiController) AddPet(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // DeletePet - Deletes a pet func (c *PetApiController) DeletePet(w http.ResponseWriter, r *http.Request) { - petIdParam, err := parseInt64Parameter(chi.URLParam(r, "petId"), true) + petIdParam, err := support.ParseInt64Parameter(chi.URLParam(r, "petId"), true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } @@ -143,7 +143,7 @@ func (c *PetApiController) DeletePet(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -158,7 +158,7 @@ func (c *PetApiController) FindPetsByStatus(w http.ResponseWriter, r *http.Reque return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -174,15 +174,15 @@ func (c *PetApiController) FindPetsByTags(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // GetPetById - Find pet by ID func (c *PetApiController) GetPetById(w http.ResponseWriter, r *http.Request) { - petIdParam, err := parseInt64Parameter(chi.URLParam(r, "petId"), true) + petIdParam, err := support.ParseInt64Parameter(chi.URLParam(r, "petId"), true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } @@ -193,17 +193,17 @@ func (c *PetApiController) GetPetById(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // UpdatePet - Update an existing pet func (c *PetApiController) UpdatePet(w http.ResponseWriter, r *http.Request) { petParam := Pet{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&petParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertPetRequired(petParam); err != nil { @@ -217,19 +217,19 @@ func (c *PetApiController) UpdatePet(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // UpdatePetWithForm - Updates a pet in the store with form data func (c *PetApiController) UpdatePetWithForm(w http.ResponseWriter, r *http.Request) { if err := r.ParseForm(); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } - petIdParam, err := parseInt64Parameter(chi.URLParam(r, "petId"), true) + petIdParam, err := support.ParseInt64Parameter(chi.URLParam(r, "petId"), true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } @@ -242,27 +242,27 @@ func (c *PetApiController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // UploadFile - uploads an image func (c *PetApiController) UploadFile(w http.ResponseWriter, r *http.Request) { if err := r.ParseMultipartForm(32 << 20); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } - petIdParam, err := parseInt64Parameter(chi.URLParam(r, "petId"), true) + petIdParam, err := support.ParseInt64Parameter(chi.URLParam(r, "petId"), true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } additionalMetadataParam := r.FormValue("additionalMetadata") - fileParam, err := ReadFormFileToTempFile(r, "file") + fileParam, err := support.ReadFormFileToTempFile(r, "file") if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } result, err := c.service.UploadFile(r.Context(), petIdParam, additionalMetadataParam, fileParam) @@ -272,6 +272,6 @@ func (c *PetApiController) UploadFile(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } diff --git a/samples/server/petstore/go-chi-server/go/api_pet_service.go b/samples/server/petstore/go-chi-server/go/api_pet_service.go index 270abe21cb18..02a73080f808 100644 --- a/samples/server/petstore/go-chi-server/go/api_pet_service.go +++ b/samples/server/petstore/go-chi-server/go/api_pet_service.go @@ -15,6 +15,7 @@ import ( "net/http" "os" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) @@ -30,114 +31,114 @@ func NewPetApiService() PetApiServicer { } // AddPet - Add a new pet to the store -func (s *PetApiService) AddPet(ctx context.Context, pet Pet) (ImplResponse, error) { +func (s *PetApiService) AddPet(ctx context.Context, pet Pet) (support.ImplResponse, error) { // TODO - update AddPet with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Pet{}) or use other options such as http.Ok ... - //return Response(200, Pet{}), nil + //return support.Response(200, Pet{}), nil //TODO: Uncomment the next line to return response Response(405, {}) or use other options such as http.Ok ... - //return Response(405, nil),nil + //return support.Response(405, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("AddPet method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("AddPet method not implemented") } // DeletePet - Deletes a pet -func (s *PetApiService) DeletePet(ctx context.Context, petId int64, apiKey string) (ImplResponse, error) { +func (s *PetApiService) DeletePet(ctx context.Context, petId int64, apiKey string) (support.ImplResponse, error) { // TODO - update DeletePet with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("DeletePet method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("DeletePet method not implemented") } // FindPetsByStatus - Finds Pets by status -func (s *PetApiService) FindPetsByStatus(ctx context.Context, status []string) (ImplResponse, error) { +func (s *PetApiService) FindPetsByStatus(ctx context.Context, status []string) (support.ImplResponse, error) { // TODO - update FindPetsByStatus with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, []Pet{}) or use other options such as http.Ok ... - //return Response(200, []Pet{}), nil + //return support.Response(200, []Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("FindPetsByStatus method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("FindPetsByStatus method not implemented") } // FindPetsByTags - Finds Pets by tags // Deprecated -func (s *PetApiService) FindPetsByTags(ctx context.Context, tags []string) (ImplResponse, error) { +func (s *PetApiService) FindPetsByTags(ctx context.Context, tags []string) (support.ImplResponse, error) { // TODO - update FindPetsByTags with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, []Pet{}) or use other options such as http.Ok ... - //return Response(200, []Pet{}), nil + //return support.Response(200, []Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("FindPetsByTags method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("FindPetsByTags method not implemented") } // GetPetById - Find pet by ID -func (s *PetApiService) GetPetById(ctx context.Context, petId int64) (ImplResponse, error) { +func (s *PetApiService) GetPetById(ctx context.Context, petId int64) (support.ImplResponse, error) { // TODO - update GetPetById with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Pet{}) or use other options such as http.Ok ... - //return Response(200, Pet{}), nil + //return support.Response(200, Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("GetPetById method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetPetById method not implemented") } // UpdatePet - Update an existing pet -func (s *PetApiService) UpdatePet(ctx context.Context, pet Pet) (ImplResponse, error) { +func (s *PetApiService) UpdatePet(ctx context.Context, pet Pet) (support.ImplResponse, error) { // TODO - update UpdatePet with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Pet{}) or use other options such as http.Ok ... - //return Response(200, Pet{}), nil + //return support.Response(200, Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil //TODO: Uncomment the next line to return response Response(405, {}) or use other options such as http.Ok ... - //return Response(405, nil),nil + //return support.Response(405, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("UpdatePet method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UpdatePet method not implemented") } // UpdatePetWithForm - Updates a pet in the store with form data -func (s *PetApiService) UpdatePetWithForm(ctx context.Context, petId int64, name string, status string) (ImplResponse, error) { +func (s *PetApiService) UpdatePetWithForm(ctx context.Context, petId int64, name string, status string) (support.ImplResponse, error) { // TODO - update UpdatePetWithForm with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(405, {}) or use other options such as http.Ok ... - //return Response(405, nil),nil + //return support.Response(405, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("UpdatePetWithForm method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UpdatePetWithForm method not implemented") } // UploadFile - uploads an image -func (s *PetApiService) UploadFile(ctx context.Context, petId int64, additionalMetadata string, file *os.File) (ImplResponse, error) { +func (s *PetApiService) UploadFile(ctx context.Context, petId int64, additionalMetadata string, file *os.File) (support.ImplResponse, error) { // TODO - update UploadFile with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, ApiResponse{}) or use other options such as http.Ok ... - //return Response(200, ApiResponse{}), nil + //return support.Response(200, ApiResponse{}), nil - return Response(http.StatusNotImplemented, nil), errors.New("UploadFile method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UploadFile method not implemented") } diff --git a/samples/server/petstore/go-chi-server/go/api_store.go b/samples/server/petstore/go-chi-server/go/api_store.go index 74e6f47781fc..a1153fe75c4f 100644 --- a/samples/server/petstore/go-chi-server/go/api_store.go +++ b/samples/server/petstore/go-chi-server/go/api_store.go @@ -10,36 +10,36 @@ package petstoreserver import ( - "encoding/json" "net/http" "strings" "github.com/go-chi/chi/v5" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) // StoreApiController binds http requests to an api service and writes the service results to the http response type StoreApiController struct { service StoreApiServicer - errorHandler ErrorHandler + errorHandler support.ErrorHandler } // StoreApiOption for how the controller is set up. type StoreApiOption func(*StoreApiController) // WithStoreApiErrorHandler inject ErrorHandler into controller -func WithStoreApiErrorHandler(h ErrorHandler) StoreApiOption { +func WithStoreApiErrorHandler(h support.ErrorHandler) StoreApiOption { return func(c *StoreApiController) { c.errorHandler = h } } // NewStoreApiController creates a default api controller -func NewStoreApiController(s StoreApiServicer, opts ...StoreApiOption) Router { +func NewStoreApiController(s StoreApiServicer, opts ...StoreApiOption) support.Router { controller := &StoreApiController{ service: s, - errorHandler: DefaultErrorHandler, + errorHandler: support.DefaultErrorHandler, } for _, opt := range opts { @@ -50,8 +50,8 @@ func NewStoreApiController(s StoreApiServicer, opts ...StoreApiOption) Router { } // Routes returns all the api routes for the StoreApiController -func (c *StoreApiController) Routes() Routes { - return Routes{ +func (c *StoreApiController) Routes() support.Routes { + return support.Routes{ { "DeleteOrder", strings.ToUpper("Delete"), @@ -90,7 +90,7 @@ func (c *StoreApiController) DeleteOrder(w http.ResponseWriter, r *http.Request) return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -103,15 +103,15 @@ func (c *StoreApiController) GetInventory(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // GetOrderById - Find purchase order by ID func (c *StoreApiController) GetOrderById(w http.ResponseWriter, r *http.Request) { - orderIdParam, err := parseInt64Parameter(chi.URLParam(r, "orderId"), true) + orderIdParam, err := support.ParseInt64Parameter(chi.URLParam(r, "orderId"), true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } @@ -122,17 +122,17 @@ func (c *StoreApiController) GetOrderById(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // PlaceOrder - Place an order for a pet func (c *StoreApiController) PlaceOrder(w http.ResponseWriter, r *http.Request) { orderParam := Order{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&orderParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertOrderRequired(orderParam); err != nil { @@ -146,6 +146,6 @@ func (c *StoreApiController) PlaceOrder(w http.ResponseWriter, r *http.Request) return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } diff --git a/samples/server/petstore/go-chi-server/go/api_store_service.go b/samples/server/petstore/go-chi-server/go/api_store_service.go index 7fde482675b6..62044deb2218 100644 --- a/samples/server/petstore/go-chi-server/go/api_store_service.go +++ b/samples/server/petstore/go-chi-server/go/api_store_service.go @@ -14,6 +14,7 @@ import ( "errors" "net/http" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) @@ -29,57 +30,57 @@ func NewStoreApiService() StoreApiServicer { } // DeleteOrder - Delete purchase order by ID -func (s *StoreApiService) DeleteOrder(ctx context.Context, orderId string) (ImplResponse, error) { +func (s *StoreApiService) DeleteOrder(ctx context.Context, orderId string) (support.ImplResponse, error) { // TODO - update DeleteOrder with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("DeleteOrder method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("DeleteOrder method not implemented") } // GetInventory - Returns pet inventories by status -func (s *StoreApiService) GetInventory(ctx context.Context) (ImplResponse, error) { +func (s *StoreApiService) GetInventory(ctx context.Context) (support.ImplResponse, error) { // TODO - update GetInventory with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, map[string]int32{}) or use other options such as http.Ok ... - //return Response(200, map[string]int32{}), nil + //return support.Response(200, map[string]int32{}), nil - return Response(http.StatusNotImplemented, nil), errors.New("GetInventory method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetInventory method not implemented") } // GetOrderById - Find purchase order by ID -func (s *StoreApiService) GetOrderById(ctx context.Context, orderId int64) (ImplResponse, error) { +func (s *StoreApiService) GetOrderById(ctx context.Context, orderId int64) (support.ImplResponse, error) { // TODO - update GetOrderById with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Order{}) or use other options such as http.Ok ... - //return Response(200, Order{}), nil + //return support.Response(200, Order{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("GetOrderById method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetOrderById method not implemented") } // PlaceOrder - Place an order for a pet -func (s *StoreApiService) PlaceOrder(ctx context.Context, order Order) (ImplResponse, error) { +func (s *StoreApiService) PlaceOrder(ctx context.Context, order Order) (support.ImplResponse, error) { // TODO - update PlaceOrder with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Order{}) or use other options such as http.Ok ... - //return Response(200, Order{}), nil + //return support.Response(200, Order{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("PlaceOrder method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("PlaceOrder method not implemented") } diff --git a/samples/server/petstore/go-chi-server/go/api_user.go b/samples/server/petstore/go-chi-server/go/api_user.go index b3f84abd36a3..7b19825ed32b 100644 --- a/samples/server/petstore/go-chi-server/go/api_user.go +++ b/samples/server/petstore/go-chi-server/go/api_user.go @@ -10,36 +10,36 @@ package petstoreserver import ( - "encoding/json" "net/http" "strings" "github.com/go-chi/chi/v5" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) // UserApiController binds http requests to an api service and writes the service results to the http response type UserApiController struct { service UserApiServicer - errorHandler ErrorHandler + errorHandler support.ErrorHandler } // UserApiOption for how the controller is set up. type UserApiOption func(*UserApiController) // WithUserApiErrorHandler inject ErrorHandler into controller -func WithUserApiErrorHandler(h ErrorHandler) UserApiOption { +func WithUserApiErrorHandler(h support.ErrorHandler) UserApiOption { return func(c *UserApiController) { c.errorHandler = h } } // NewUserApiController creates a default api controller -func NewUserApiController(s UserApiServicer, opts ...UserApiOption) Router { +func NewUserApiController(s UserApiServicer, opts ...UserApiOption) support.Router { controller := &UserApiController{ service: s, - errorHandler: DefaultErrorHandler, + errorHandler: support.DefaultErrorHandler, } for _, opt := range opts { @@ -50,8 +50,8 @@ func NewUserApiController(s UserApiServicer, opts ...UserApiOption) Router { } // Routes returns all the api routes for the UserApiController -func (c *UserApiController) Routes() Routes { - return Routes{ +func (c *UserApiController) Routes() support.Routes { + return support.Routes{ { "CreateUser", strings.ToUpper("Post"), @@ -106,10 +106,10 @@ func (c *UserApiController) Routes() Routes { // CreateUser - Create user func (c *UserApiController) CreateUser(w http.ResponseWriter, r *http.Request) { userParam := User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertUserRequired(userParam); err != nil { @@ -123,17 +123,17 @@ func (c *UserApiController) CreateUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // CreateUsersWithArrayInput - Creates list of users with given input array func (c *UserApiController) CreateUsersWithArrayInput(w http.ResponseWriter, r *http.Request) { userParam := []User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } for _, el := range userParam { @@ -149,17 +149,17 @@ func (c *UserApiController) CreateUsersWithArrayInput(w http.ResponseWriter, r * return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // CreateUsersWithListInput - Creates list of users with given input array func (c *UserApiController) CreateUsersWithListInput(w http.ResponseWriter, r *http.Request) { userParam := []User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } for _, el := range userParam { @@ -175,7 +175,7 @@ func (c *UserApiController) CreateUsersWithListInput(w http.ResponseWriter, r *h return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -190,7 +190,7 @@ func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -205,7 +205,7 @@ func (c *UserApiController) GetUserByName(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -221,7 +221,7 @@ func (c *UserApiController) LoginUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -234,7 +234,7 @@ func (c *UserApiController) LogoutUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -243,10 +243,10 @@ func (c *UserApiController) UpdateUser(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") userParam := User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertUserRequired(userParam); err != nil { @@ -260,6 +260,6 @@ func (c *UserApiController) UpdateUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } diff --git a/samples/server/petstore/go-chi-server/go/api_user_service.go b/samples/server/petstore/go-chi-server/go/api_user_service.go index 4bf2327c5a05..d24f3c6084c0 100644 --- a/samples/server/petstore/go-chi-server/go/api_user_service.go +++ b/samples/server/petstore/go-chi-server/go/api_user_service.go @@ -14,6 +14,7 @@ import ( "errors" "net/http" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) @@ -29,104 +30,104 @@ func NewUserApiService() UserApiServicer { } // CreateUser - Create user -func (s *UserApiService) CreateUser(ctx context.Context, user User) (ImplResponse, error) { +func (s *UserApiService) CreateUser(ctx context.Context, user User) (support.ImplResponse, error) { // TODO - update CreateUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("CreateUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("CreateUser method not implemented") } // CreateUsersWithArrayInput - Creates list of users with given input array -func (s *UserApiService) CreateUsersWithArrayInput(ctx context.Context, user []User) (ImplResponse, error) { +func (s *UserApiService) CreateUsersWithArrayInput(ctx context.Context, user []User) (support.ImplResponse, error) { // TODO - update CreateUsersWithArrayInput with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithArrayInput method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithArrayInput method not implemented") } // CreateUsersWithListInput - Creates list of users with given input array -func (s *UserApiService) CreateUsersWithListInput(ctx context.Context, user []User) (ImplResponse, error) { +func (s *UserApiService) CreateUsersWithListInput(ctx context.Context, user []User) (support.ImplResponse, error) { // TODO - update CreateUsersWithListInput with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithListInput method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithListInput method not implemented") } // DeleteUser - Delete user -func (s *UserApiService) DeleteUser(ctx context.Context, username string) (ImplResponse, error) { +func (s *UserApiService) DeleteUser(ctx context.Context, username string) (support.ImplResponse, error) { // TODO - update DeleteUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("DeleteUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("DeleteUser method not implemented") } // GetUserByName - Get user by user name -func (s *UserApiService) GetUserByName(ctx context.Context, username string) (ImplResponse, error) { +func (s *UserApiService) GetUserByName(ctx context.Context, username string) (support.ImplResponse, error) { // TODO - update GetUserByName with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, User{}) or use other options such as http.Ok ... - //return Response(200, User{}), nil + //return support.Response(200, User{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("GetUserByName method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetUserByName method not implemented") } // LoginUser - Logs user into the system -func (s *UserApiService) LoginUser(ctx context.Context, username string, password string) (ImplResponse, error) { +func (s *UserApiService) LoginUser(ctx context.Context, username string, password string) (support.ImplResponse, error) { // TODO - update LoginUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, string{}) or use other options such as http.Ok ... - //return Response(200, string{}), nil + //return support.Response(200, string{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("LoginUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("LoginUser method not implemented") } // LogoutUser - Logs out current logged in user session -func (s *UserApiService) LogoutUser(ctx context.Context) (ImplResponse, error) { +func (s *UserApiService) LogoutUser(ctx context.Context) (support.ImplResponse, error) { // TODO - update LogoutUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("LogoutUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("LogoutUser method not implemented") } // UpdateUser - Updated user -func (s *UserApiService) UpdateUser(ctx context.Context, username string, user User) (ImplResponse, error) { +func (s *UserApiService) UpdateUser(ctx context.Context, username string, user User) (support.ImplResponse, error) { // TODO - update UpdateUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("UpdateUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UpdateUser method not implemented") } diff --git a/samples/server/petstore/go-chi-server/go/model_api_response.go b/samples/server/petstore/go-chi-server/go/model_api_response.go index 324cfbe08444..37b1391b3200 100644 --- a/samples/server/petstore/go-chi-server/go/model_api_response.go +++ b/samples/server/petstore/go-chi-server/go/model_api_response.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // ApiResponse - Describes the result of uploading an image resource type ApiResponse struct { @@ -27,10 +31,10 @@ func AssertApiResponseRequired(obj ApiResponse) error { // AssertRecurseApiResponseRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of ApiResponse (e.g. [][]ApiResponse), otherwise ErrTypeAssertionError is thrown. func AssertRecurseApiResponseRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aApiResponse, ok := obj.(ApiResponse) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertApiResponseRequired(aApiResponse) }) diff --git a/samples/server/petstore/go-chi-server/go/model_category.go b/samples/server/petstore/go-chi-server/go/model_category.go index 3ae01892a3fc..b742f6629e83 100644 --- a/samples/server/petstore/go-chi-server/go/model_category.go +++ b/samples/server/petstore/go-chi-server/go/model_category.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // Category - A category for a pet type Category struct { @@ -25,10 +29,10 @@ func AssertCategoryRequired(obj Category) error { // AssertRecurseCategoryRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Category (e.g. [][]Category), otherwise ErrTypeAssertionError is thrown. func AssertRecurseCategoryRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aCategory, ok := obj.(Category) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertCategoryRequired(aCategory) }) diff --git a/samples/server/petstore/go-chi-server/go/model_order.go b/samples/server/petstore/go-chi-server/go/model_order.go index 80ecfea3dc7f..d0d11d434d0a 100644 --- a/samples/server/petstore/go-chi-server/go/model_order.go +++ b/samples/server/petstore/go-chi-server/go/model_order.go @@ -8,9 +8,9 @@ */ package petstoreserver - import ( "time" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) // Order - An order for a pets from the pet store @@ -38,10 +38,10 @@ func AssertOrderRequired(obj Order) error { // AssertRecurseOrderRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Order (e.g. [][]Order), otherwise ErrTypeAssertionError is thrown. func AssertRecurseOrderRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aOrder, ok := obj.(Order) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertOrderRequired(aOrder) }) diff --git a/samples/server/petstore/go-chi-server/go/model_pet.go b/samples/server/petstore/go-chi-server/go/model_pet.go index 8e3dc7ad66f1..9dab6f10be93 100644 --- a/samples/server/petstore/go-chi-server/go/model_pet.go +++ b/samples/server/petstore/go-chi-server/go/model_pet.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // Pet - A pet for sale in the pet store type Pet struct { @@ -34,8 +38,8 @@ func AssertPetRequired(obj Pet) error { "photoUrls": obj.PhotoUrls, } for name, el := range elements { - if isZero := IsZeroValue(el); isZero { - return &RequiredError{Field: name} + if isZero := support.IsZeroValue(el); isZero { + return &support.RequiredError{Field: name} } } @@ -53,10 +57,10 @@ func AssertPetRequired(obj Pet) error { // AssertRecursePetRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Pet (e.g. [][]Pet), otherwise ErrTypeAssertionError is thrown. func AssertRecursePetRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aPet, ok := obj.(Pet) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertPetRequired(aPet) }) diff --git a/samples/server/petstore/go-chi-server/go/model_tag.go b/samples/server/petstore/go-chi-server/go/model_tag.go index 0631ccc4866f..9a442e48b2ec 100644 --- a/samples/server/petstore/go-chi-server/go/model_tag.go +++ b/samples/server/petstore/go-chi-server/go/model_tag.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // Tag - A tag for a pet type Tag struct { @@ -25,10 +29,10 @@ func AssertTagRequired(obj Tag) error { // AssertRecurseTagRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Tag (e.g. [][]Tag), otherwise ErrTypeAssertionError is thrown. func AssertRecurseTagRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aTag, ok := obj.(Tag) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertTagRequired(aTag) }) diff --git a/samples/server/petstore/go-chi-server/go/model_user.go b/samples/server/petstore/go-chi-server/go/model_user.go index 83ac114e3c59..a52e4d55560a 100644 --- a/samples/server/petstore/go-chi-server/go/model_user.go +++ b/samples/server/petstore/go-chi-server/go/model_user.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // User - A User who is purchasing from the pet store type User struct { @@ -38,10 +42,10 @@ func AssertUserRequired(obj User) error { // AssertRecurseUserRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of User (e.g. [][]User), otherwise ErrTypeAssertionError is thrown. func AssertRecurseUserRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aUser, ok := obj.(User) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertUserRequired(aUser) }) diff --git a/samples/server/petstore/go-chi-server/main.go b/samples/server/petstore/go-chi-server/main.go index ddc5258297ca..7b22919e9839 100644 --- a/samples/server/petstore/go-chi-server/main.go +++ b/samples/server/petstore/go-chi-server/main.go @@ -14,6 +14,7 @@ import ( "net/http" petstoreserver "github.com/GIT_USER_ID/GIT_REPO_ID/go" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) func main() { @@ -28,7 +29,7 @@ func main() { UserApiService := petstoreserver.NewUserApiService() UserApiController := petstoreserver.NewUserApiController(UserApiService) - router := petstoreserver.NewRouter(PetApiController, StoreApiController, UserApiController) + router := support.NewRouter(PetApiController, StoreApiController, UserApiController) log.Fatal(http.ListenAndServe(":8080", router)) } diff --git a/samples/server/petstore/go-server-required/go/error.go b/samples/server/petstore/go-chi-server/support/error.go similarity index 98% rename from samples/server/petstore/go-server-required/go/error.go rename to samples/server/petstore/go-chi-server/support/error.go index 2c0b010fe8da..e9c4795ffe3e 100644 --- a/samples/server/petstore/go-server-required/go/error.go +++ b/samples/server/petstore/go-chi-server/support/error.go @@ -7,7 +7,7 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( "errors" diff --git a/samples/server/petstore/go-api-server/go/helpers.go b/samples/server/petstore/go-chi-server/support/helpers.go similarity index 70% rename from samples/server/petstore/go-api-server/go/helpers.go rename to samples/server/petstore/go-chi-server/support/helpers.go index f18a261018dd..ce5dcce4819e 100644 --- a/samples/server/petstore/go-api-server/go/helpers.go +++ b/samples/server/petstore/go-chi-server/support/helpers.go @@ -7,9 +7,12 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( + "encoding/json" + "net/http" + "io" "reflect" ) @@ -62,3 +65,28 @@ func AssertRecurseValueRequired(value reflect.Value, callback func(interface{}) } return nil } + +// EncodeJSONResponse uses the json encoder to write an interface to the http response with an optional status code +func EncodeJSONResponse(i interface{}, status *int, headers map[string][]string, w http.ResponseWriter) error { + wHeader := w.Header() + if headers != nil { + for key, values := range headers { + for _, value := range values { + wHeader.Add(key, value) + } + } + } + wHeader.Set("Content-Type", "application/json; charset=UTF-8") + if status != nil { + w.WriteHeader(*status) + } else { + w.WriteHeader(http.StatusOK) + } + + return json.NewEncoder(w).Encode(i) +} + +// NewJSONDecoder creates a jew json decoder to decode an http body. +func NewJSONDecoder(r io.Reader) *json.Decoder { + return json.NewDecoder(r) +} diff --git a/samples/server/petstore/go-server-required/go/impl.go b/samples/server/petstore/go-chi-server/support/impl.go similarity index 94% rename from samples/server/petstore/go-server-required/go/impl.go rename to samples/server/petstore/go-chi-server/support/impl.go index 8c72e26a342a..54db797feb04 100644 --- a/samples/server/petstore/go-server-required/go/impl.go +++ b/samples/server/petstore/go-chi-server/support/impl.go @@ -7,7 +7,7 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support // ImplResponse response defines an error code with the associated body type ImplResponse struct { diff --git a/samples/server/petstore/go-chi-server/go/logger.go b/samples/server/petstore/go-chi-server/support/logger.go similarity index 96% rename from samples/server/petstore/go-chi-server/go/logger.go rename to samples/server/petstore/go-chi-server/support/logger.go index 08cc0ea3f1d2..cb27ef95fd71 100644 --- a/samples/server/petstore/go-chi-server/go/logger.go +++ b/samples/server/petstore/go-chi-server/support/logger.go @@ -7,7 +7,7 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( "log" diff --git a/samples/server/petstore/go-chi-server/go/routers.go b/samples/server/petstore/go-chi-server/support/routers.go similarity index 75% rename from samples/server/petstore/go-chi-server/go/routers.go rename to samples/server/petstore/go-chi-server/support/routers.go index 3213d5dde239..88984b2acb38 100644 --- a/samples/server/petstore/go-chi-server/go/routers.go +++ b/samples/server/petstore/go-chi-server/support/routers.go @@ -7,10 +7,9 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( - "encoding/json" "errors" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" @@ -55,26 +54,6 @@ func NewRouter(routers ...Router) chi.Router { return router } -// EncodeJSONResponse uses the json encoder to write an interface to the http response with an optional status code -func EncodeJSONResponse(i interface{}, status *int, headers map[string][]string, w http.ResponseWriter) error { - wHeader := w.Header() - if headers != nil { - for key, values := range headers { - for _, value := range values { - wHeader.Add(key, value) - } - } - } - wHeader.Set("Content-Type", "application/json; charset=UTF-8") - if status != nil { - w.WriteHeader(*status) - } else { - w.WriteHeader(http.StatusOK) - } - - return json.NewEncoder(w).Encode(i) -} - // ReadFormFileToTempFile reads file data from a request form and writes it to a temporary file func ReadFormFileToTempFile(r *http.Request, key string) (*os.File, error) { _, fileHeader, err := r.FormFile(key) @@ -131,8 +110,8 @@ func readFileHeaderToTempFile(fileHeader *multipart.FileHeader) (*os.File, error return file, nil } -// parseInt64Parameter parses a string parameter to an int64. -func parseInt64Parameter(param string, required bool) (int64, error) { +// ParseInt64Parameter parses a string parameter to an int64. +func ParseInt64Parameter(param string, required bool) (int64, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -144,8 +123,8 @@ func parseInt64Parameter(param string, required bool) (int64, error) { return strconv.ParseInt(param, 10, 64) } -// parseInt32Parameter parses a string parameter to an int32. -func parseInt32Parameter(param string, required bool) (int32, error) { +// ParseInt32Parameter parses a string parameter to an int32. +func ParseInt32Parameter(param string, required bool) (int32, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -162,8 +141,8 @@ func parseInt32Parameter(param string, required bool) (int32, error) { return int32(val), nil } -// parseBoolParameter parses a string parameter to a bool -func parseBoolParameter(param string) (bool, error) { +// ParseBoolParameter parses a string parameter to a bool +func ParseBoolParameter(param string) (bool, error) { val, err := strconv.ParseBool(param) if err != nil { return false, err @@ -172,8 +151,8 @@ func parseBoolParameter(param string) (bool, error) { return bool(val), nil } -// parseInt64ArrayParameter parses a string parameter containing array of values to []int64. -func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { +// ParseInt64ArrayParameter parses a string parameter containing array of values to []int64. +func ParseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { if param == "" { if required { return nil, errors.New(errMsgRequiredMissing) @@ -196,8 +175,8 @@ func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, erro return ints, nil } -// parseInt32ArrayParameter parses a string parameter containing array of values to []int32. -func parseInt32ArrayParameter(param, delim string, required bool) ([]int32, error) { +// ParseInt32ArrayParameter parses a string parameter containing array of values to []int32. +func ParseInt32ArrayParameter(param, delim string, required bool) ([]int32, error) { if param == "" { if required { return nil, errors.New(errMsgRequiredMissing) @@ -218,4 +197,4 @@ func parseInt32ArrayParameter(param, delim string, required bool) ([]int32, erro } return ints, nil -} \ No newline at end of file +} diff --git a/samples/server/petstore/go-server-required/.openapi-generator/FILES b/samples/server/petstore/go-server-required/.openapi-generator/FILES index 86f9552610cb..24fd7f80dfa2 100644 --- a/samples/server/petstore/go-server-required/.openapi-generator/FILES +++ b/samples/server/petstore/go-server-required/.openapi-generator/FILES @@ -10,10 +10,6 @@ go/api_store.go go/api_store_service.go go/api_user.go go/api_user_service.go -go/error.go -go/helpers.go -go/impl.go -go/logger.go go/model_api_response.go go/model_category.go go/model_order.go @@ -22,5 +18,9 @@ go/model_pet.go go/model_special_info.go go/model_tag.go go/model_user.go -go/routers.go main.go +support/error.go +support/helpers.go +support/impl.go +support/logger.go +support/routers.go diff --git a/samples/server/petstore/go-server-required/go/api.go b/samples/server/petstore/go-server-required/go/api.go index 3ca080f00754..fb480bc1e163 100644 --- a/samples/server/petstore/go-server-required/go/api.go +++ b/samples/server/petstore/go-server-required/go/api.go @@ -13,12 +13,23 @@ import ( "context" "net/http" "os" + + "github.com/GIT_USER_ID/GIT_REPO_ID/support" + + + "github.com/GIT_USER_ID/GIT_REPO_ID/support" + + + "github.com/GIT_USER_ID/GIT_REPO_ID/support" + ) + + // PetApiRouter defines the required methods for binding the api requests to a responses for the PetApi // The PetApiRouter implementation should parse necessary information from the http request, // pass the data to a PetApiServicer to perform the required actions, then write the service results to the http response. -type PetApiRouter interface { +type PetApiRouter interface { AddPet(http.ResponseWriter, *http.Request) DeletePet(http.ResponseWriter, *http.Request) FindPetsByStatus(http.ResponseWriter, *http.Request) @@ -29,21 +40,19 @@ type PetApiRouter interface { UpdatePetWithForm(http.ResponseWriter, *http.Request) UploadFile(http.ResponseWriter, *http.Request) } - // StoreApiRouter defines the required methods for binding the api requests to a responses for the StoreApi // The StoreApiRouter implementation should parse necessary information from the http request, // pass the data to a StoreApiServicer to perform the required actions, then write the service results to the http response. -type StoreApiRouter interface { +type StoreApiRouter interface { DeleteOrder(http.ResponseWriter, *http.Request) GetInventory(http.ResponseWriter, *http.Request) GetOrderById(http.ResponseWriter, *http.Request) PlaceOrder(http.ResponseWriter, *http.Request) } - // UserApiRouter defines the required methods for binding the api requests to a responses for the UserApi // The UserApiRouter implementation should parse necessary information from the http request, // pass the data to a UserApiServicer to perform the required actions, then write the service results to the http response. -type UserApiRouter interface { +type UserApiRouter interface { CreateUser(http.ResponseWriter, *http.Request) CreateUsersWithArrayInput(http.ResponseWriter, *http.Request) CreateUsersWithListInput(http.ResponseWriter, *http.Request) @@ -54,44 +63,47 @@ type UserApiRouter interface { UpdateUser(http.ResponseWriter, *http.Request) } + // PetApiServicer defines the api actions for the PetApi service // This interface intended to stay up to date with the openapi yaml used to generate it, // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. -type PetApiServicer interface { - AddPet(context.Context, Pet) (ImplResponse, error) - DeletePet(context.Context, int64, string) (ImplResponse, error) - FindPetsByStatus(context.Context, []string) (ImplResponse, error) +type PetApiServicer interface { + AddPet(context.Context, Pet) (support.ImplResponse, error) + DeletePet(context.Context, int64, string) (support.ImplResponse, error) + FindPetsByStatus(context.Context, []string) (support.ImplResponse, error) // Deprecated - FindPetsByTags(context.Context, []string) (ImplResponse, error) - GetPetById(context.Context, int64) (ImplResponse, error) - UpdatePet(context.Context, Pet) (ImplResponse, error) - UpdatePetWithForm(context.Context, int64, string, string) (ImplResponse, error) - UploadFile(context.Context, int64, string, *os.File) (ImplResponse, error) + FindPetsByTags(context.Context, []string) (support.ImplResponse, error) + GetPetById(context.Context, int64) (support.ImplResponse, error) + UpdatePet(context.Context, Pet) (support.ImplResponse, error) + UpdatePetWithForm(context.Context, int64, string, string) (support.ImplResponse, error) + UploadFile(context.Context, int64, string, *os.File) (support.ImplResponse, error) } + // StoreApiServicer defines the api actions for the StoreApi service // This interface intended to stay up to date with the openapi yaml used to generate it, // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. -type StoreApiServicer interface { - DeleteOrder(context.Context, string) (ImplResponse, error) - GetInventory(context.Context) (ImplResponse, error) - GetOrderById(context.Context, int64) (ImplResponse, error) - PlaceOrder(context.Context, Order) (ImplResponse, error) +type StoreApiServicer interface { + DeleteOrder(context.Context, string) (support.ImplResponse, error) + GetInventory(context.Context) (support.ImplResponse, error) + GetOrderById(context.Context, int64) (support.ImplResponse, error) + PlaceOrder(context.Context, Order) (support.ImplResponse, error) } + // UserApiServicer defines the api actions for the UserApi service // This interface intended to stay up to date with the openapi yaml used to generate it, // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. -type UserApiServicer interface { - CreateUser(context.Context, User) (ImplResponse, error) - CreateUsersWithArrayInput(context.Context, []User) (ImplResponse, error) - CreateUsersWithListInput(context.Context, []User) (ImplResponse, error) - DeleteUser(context.Context, string) (ImplResponse, error) - GetUserByName(context.Context, string) (ImplResponse, error) - LoginUser(context.Context, string, string) (ImplResponse, error) - LogoutUser(context.Context) (ImplResponse, error) - UpdateUser(context.Context, string, User) (ImplResponse, error) +type UserApiServicer interface { + CreateUser(context.Context, User) (support.ImplResponse, error) + CreateUsersWithArrayInput(context.Context, []User) (support.ImplResponse, error) + CreateUsersWithListInput(context.Context, []User) (support.ImplResponse, error) + DeleteUser(context.Context, string) (support.ImplResponse, error) + GetUserByName(context.Context, string) (support.ImplResponse, error) + LoginUser(context.Context, string, string) (support.ImplResponse, error) + LogoutUser(context.Context) (support.ImplResponse, error) + UpdateUser(context.Context, string, User) (support.ImplResponse, error) } diff --git a/samples/server/petstore/go-server-required/go/api_pet.go b/samples/server/petstore/go-server-required/go/api_pet.go index 6405a4e520d0..067d7534e7f3 100644 --- a/samples/server/petstore/go-server-required/go/api_pet.go +++ b/samples/server/petstore/go-server-required/go/api_pet.go @@ -10,34 +10,36 @@ package petstoreserver import ( - "encoding/json" "net/http" "strings" "github.com/go-chi/chi/v5" + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" + ) // PetApiController binds http requests to an api service and writes the service results to the http response type PetApiController struct { - service PetApiServicer - errorHandler ErrorHandler + service PetApiServicer + errorHandler support.ErrorHandler } // PetApiOption for how the controller is set up. type PetApiOption func(*PetApiController) // WithPetApiErrorHandler inject ErrorHandler into controller -func WithPetApiErrorHandler(h ErrorHandler) PetApiOption { +func WithPetApiErrorHandler(h support.ErrorHandler) PetApiOption { return func(c *PetApiController) { c.errorHandler = h } } // NewPetApiController creates a default api controller -func NewPetApiController(s PetApiServicer, opts ...PetApiOption) Router { +func NewPetApiController(s PetApiServicer, opts ...PetApiOption) support.Router { controller := &PetApiController{ service: s, - errorHandler: DefaultErrorHandler, + errorHandler: support.DefaultErrorHandler, } for _, opt := range opts { @@ -48,8 +50,8 @@ func NewPetApiController(s PetApiServicer, opts ...PetApiOption) Router { } // Routes returns all the api routes for the PetApiController -func (c *PetApiController) Routes() Routes { - return Routes{ +func (c *PetApiController) Routes() support.Routes { + return support.Routes{ { "AddPet", strings.ToUpper("Post"), @@ -104,10 +106,10 @@ func (c *PetApiController) Routes() Routes { // AddPet - Add a new pet to the store func (c *PetApiController) AddPet(w http.ResponseWriter, r *http.Request) { petParam := Pet{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&petParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertPetRequired(petParam); err != nil { @@ -121,15 +123,15 @@ func (c *PetApiController) AddPet(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // DeletePet - Deletes a pet func (c *PetApiController) DeletePet(w http.ResponseWriter, r *http.Request) { - petIdParam, err := parseInt64Parameter(chi.URLParam(r, "petId"), true) + petIdParam, err := support.ParseInt64Parameter(chi.URLParam(r, "petId"), true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } @@ -141,7 +143,7 @@ func (c *PetApiController) DeletePet(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -156,7 +158,7 @@ func (c *PetApiController) FindPetsByStatus(w http.ResponseWriter, r *http.Reque return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -172,15 +174,15 @@ func (c *PetApiController) FindPetsByTags(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // GetPetById - Find pet by ID func (c *PetApiController) GetPetById(w http.ResponseWriter, r *http.Request) { - petIdParam, err := parseInt64Parameter(chi.URLParam(r, "petId"), true) + petIdParam, err := support.ParseInt64Parameter(chi.URLParam(r, "petId"), true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } @@ -191,17 +193,17 @@ func (c *PetApiController) GetPetById(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // UpdatePet - Update an existing pet func (c *PetApiController) UpdatePet(w http.ResponseWriter, r *http.Request) { petParam := Pet{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&petParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertPetRequired(petParam); err != nil { @@ -215,24 +217,24 @@ func (c *PetApiController) UpdatePet(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // UpdatePetWithForm - Updates a pet in the store with form data func (c *PetApiController) UpdatePetWithForm(w http.ResponseWriter, r *http.Request) { if err := r.ParseForm(); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } - petIdParam, err := parseInt64Parameter(chi.URLParam(r, "petId"), true) + petIdParam, err := support.ParseInt64Parameter(chi.URLParam(r, "petId"), true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } - nameParam := r.FormValue("name") - statusParam := r.FormValue("status") + nameParam := r.FormValue("name") + statusParam := r.FormValue("status") result, err := c.service.UpdatePetWithForm(r.Context(), petIdParam, nameParam, statusParam) // If an error occurred, encode the error with the status code if err != nil { @@ -240,36 +242,36 @@ func (c *PetApiController) UpdatePetWithForm(w http.ResponseWriter, r *http.Requ return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // UploadFile - uploads an image func (c *PetApiController) UploadFile(w http.ResponseWriter, r *http.Request) { if err := r.ParseMultipartForm(32 << 20); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } - petIdParam, err := parseInt64Parameter(chi.URLParam(r, "petId"), true) + petIdParam, err := support.ParseInt64Parameter(chi.URLParam(r, "petId"), true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } - additionalMetadataParam := r.FormValue("additionalMetadata") - - fileParam, err := ReadFormFileToTempFile(r, "file") + additionalMetadataParam := r.FormValue("additionalMetadata") + + fileParam, err := support.ReadFormFileToTempFile(r, "file") if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } - result, err := c.service.UploadFile(r.Context(), petIdParam, additionalMetadataParam, fileParam) + result, err := c.service.UploadFile(r.Context(), petIdParam, additionalMetadataParam, fileParam) // If an error occurred, encode the error with the status code if err != nil { c.errorHandler(w, r, err, &result) return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } diff --git a/samples/server/petstore/go-server-required/go/api_pet_service.go b/samples/server/petstore/go-server-required/go/api_pet_service.go index a7993147e9a6..02a73080f808 100644 --- a/samples/server/petstore/go-server-required/go/api_pet_service.go +++ b/samples/server/petstore/go-server-required/go/api_pet_service.go @@ -14,6 +14,9 @@ import ( "errors" "net/http" "os" + + "github.com/GIT_USER_ID/GIT_REPO_ID/support" + ) // PetApiService is a service that implements the logic for the PetApiServicer @@ -28,114 +31,114 @@ func NewPetApiService() PetApiServicer { } // AddPet - Add a new pet to the store -func (s *PetApiService) AddPet(ctx context.Context, pet Pet) (ImplResponse, error) { +func (s *PetApiService) AddPet(ctx context.Context, pet Pet) (support.ImplResponse, error) { // TODO - update AddPet with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Pet{}) or use other options such as http.Ok ... - //return Response(200, Pet{}), nil + //return support.Response(200, Pet{}), nil //TODO: Uncomment the next line to return response Response(405, {}) or use other options such as http.Ok ... - //return Response(405, nil),nil + //return support.Response(405, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("AddPet method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("AddPet method not implemented") } // DeletePet - Deletes a pet -func (s *PetApiService) DeletePet(ctx context.Context, petId int64, apiKey string) (ImplResponse, error) { +func (s *PetApiService) DeletePet(ctx context.Context, petId int64, apiKey string) (support.ImplResponse, error) { // TODO - update DeletePet with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("DeletePet method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("DeletePet method not implemented") } // FindPetsByStatus - Finds Pets by status -func (s *PetApiService) FindPetsByStatus(ctx context.Context, status []string) (ImplResponse, error) { +func (s *PetApiService) FindPetsByStatus(ctx context.Context, status []string) (support.ImplResponse, error) { // TODO - update FindPetsByStatus with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, []Pet{}) or use other options such as http.Ok ... - //return Response(200, []Pet{}), nil + //return support.Response(200, []Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("FindPetsByStatus method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("FindPetsByStatus method not implemented") } // FindPetsByTags - Finds Pets by tags // Deprecated -func (s *PetApiService) FindPetsByTags(ctx context.Context, tags []string) (ImplResponse, error) { +func (s *PetApiService) FindPetsByTags(ctx context.Context, tags []string) (support.ImplResponse, error) { // TODO - update FindPetsByTags with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, []Pet{}) or use other options such as http.Ok ... - //return Response(200, []Pet{}), nil + //return support.Response(200, []Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("FindPetsByTags method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("FindPetsByTags method not implemented") } // GetPetById - Find pet by ID -func (s *PetApiService) GetPetById(ctx context.Context, petId int64) (ImplResponse, error) { +func (s *PetApiService) GetPetById(ctx context.Context, petId int64) (support.ImplResponse, error) { // TODO - update GetPetById with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Pet{}) or use other options such as http.Ok ... - //return Response(200, Pet{}), nil + //return support.Response(200, Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("GetPetById method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetPetById method not implemented") } // UpdatePet - Update an existing pet -func (s *PetApiService) UpdatePet(ctx context.Context, pet Pet) (ImplResponse, error) { +func (s *PetApiService) UpdatePet(ctx context.Context, pet Pet) (support.ImplResponse, error) { // TODO - update UpdatePet with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Pet{}) or use other options such as http.Ok ... - //return Response(200, Pet{}), nil + //return support.Response(200, Pet{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil //TODO: Uncomment the next line to return response Response(405, {}) or use other options such as http.Ok ... - //return Response(405, nil),nil + //return support.Response(405, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("UpdatePet method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UpdatePet method not implemented") } // UpdatePetWithForm - Updates a pet in the store with form data -func (s *PetApiService) UpdatePetWithForm(ctx context.Context, petId int64, name string, status string) (ImplResponse, error) { +func (s *PetApiService) UpdatePetWithForm(ctx context.Context, petId int64, name string, status string) (support.ImplResponse, error) { // TODO - update UpdatePetWithForm with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(405, {}) or use other options such as http.Ok ... - //return Response(405, nil),nil + //return support.Response(405, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("UpdatePetWithForm method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UpdatePetWithForm method not implemented") } // UploadFile - uploads an image -func (s *PetApiService) UploadFile(ctx context.Context, petId int64, additionalMetadata string, file *os.File) (ImplResponse, error) { +func (s *PetApiService) UploadFile(ctx context.Context, petId int64, additionalMetadata string, file *os.File) (support.ImplResponse, error) { // TODO - update UploadFile with the required logic for this service method. // Add api_pet_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, ApiResponse{}) or use other options such as http.Ok ... - //return Response(200, ApiResponse{}), nil + //return support.Response(200, ApiResponse{}), nil - return Response(http.StatusNotImplemented, nil), errors.New("UploadFile method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UploadFile method not implemented") } diff --git a/samples/server/petstore/go-server-required/go/api_store.go b/samples/server/petstore/go-server-required/go/api_store.go index 667f9bc06deb..a1153fe75c4f 100644 --- a/samples/server/petstore/go-server-required/go/api_store.go +++ b/samples/server/petstore/go-server-required/go/api_store.go @@ -10,34 +10,36 @@ package petstoreserver import ( - "encoding/json" "net/http" "strings" "github.com/go-chi/chi/v5" + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" + ) // StoreApiController binds http requests to an api service and writes the service results to the http response type StoreApiController struct { - service StoreApiServicer - errorHandler ErrorHandler + service StoreApiServicer + errorHandler support.ErrorHandler } // StoreApiOption for how the controller is set up. type StoreApiOption func(*StoreApiController) // WithStoreApiErrorHandler inject ErrorHandler into controller -func WithStoreApiErrorHandler(h ErrorHandler) StoreApiOption { +func WithStoreApiErrorHandler(h support.ErrorHandler) StoreApiOption { return func(c *StoreApiController) { c.errorHandler = h } } // NewStoreApiController creates a default api controller -func NewStoreApiController(s StoreApiServicer, opts ...StoreApiOption) Router { +func NewStoreApiController(s StoreApiServicer, opts ...StoreApiOption) support.Router { controller := &StoreApiController{ service: s, - errorHandler: DefaultErrorHandler, + errorHandler: support.DefaultErrorHandler, } for _, opt := range opts { @@ -48,8 +50,8 @@ func NewStoreApiController(s StoreApiServicer, opts ...StoreApiOption) Router { } // Routes returns all the api routes for the StoreApiController -func (c *StoreApiController) Routes() Routes { - return Routes{ +func (c *StoreApiController) Routes() support.Routes { + return support.Routes{ { "DeleteOrder", strings.ToUpper("Delete"), @@ -80,7 +82,7 @@ func (c *StoreApiController) Routes() Routes { // DeleteOrder - Delete purchase order by ID func (c *StoreApiController) DeleteOrder(w http.ResponseWriter, r *http.Request) { orderIdParam := chi.URLParam(r, "orderId") - + result, err := c.service.DeleteOrder(r.Context(), orderIdParam) // If an error occurred, encode the error with the status code if err != nil { @@ -88,7 +90,7 @@ func (c *StoreApiController) DeleteOrder(w http.ResponseWriter, r *http.Request) return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -101,15 +103,15 @@ func (c *StoreApiController) GetInventory(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // GetOrderById - Find purchase order by ID func (c *StoreApiController) GetOrderById(w http.ResponseWriter, r *http.Request) { - orderIdParam, err := parseInt64Parameter(chi.URLParam(r, "orderId"), true) + orderIdParam, err := support.ParseInt64Parameter(chi.URLParam(r, "orderId"), true) if err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } @@ -120,17 +122,17 @@ func (c *StoreApiController) GetOrderById(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // PlaceOrder - Place an order for a pet func (c *StoreApiController) PlaceOrder(w http.ResponseWriter, r *http.Request) { orderParam := Order{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&orderParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertOrderRequired(orderParam); err != nil { @@ -144,6 +146,6 @@ func (c *StoreApiController) PlaceOrder(w http.ResponseWriter, r *http.Request) return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } diff --git a/samples/server/petstore/go-server-required/go/api_store_service.go b/samples/server/petstore/go-server-required/go/api_store_service.go index 57d31c5f6bdd..62044deb2218 100644 --- a/samples/server/petstore/go-server-required/go/api_store_service.go +++ b/samples/server/petstore/go-server-required/go/api_store_service.go @@ -13,6 +13,9 @@ import ( "context" "errors" "net/http" + + "github.com/GIT_USER_ID/GIT_REPO_ID/support" + ) // StoreApiService is a service that implements the logic for the StoreApiServicer @@ -27,57 +30,57 @@ func NewStoreApiService() StoreApiServicer { } // DeleteOrder - Delete purchase order by ID -func (s *StoreApiService) DeleteOrder(ctx context.Context, orderId string) (ImplResponse, error) { +func (s *StoreApiService) DeleteOrder(ctx context.Context, orderId string) (support.ImplResponse, error) { // TODO - update DeleteOrder with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("DeleteOrder method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("DeleteOrder method not implemented") } // GetInventory - Returns pet inventories by status -func (s *StoreApiService) GetInventory(ctx context.Context) (ImplResponse, error) { +func (s *StoreApiService) GetInventory(ctx context.Context) (support.ImplResponse, error) { // TODO - update GetInventory with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, map[string]int32{}) or use other options such as http.Ok ... - //return Response(200, map[string]int32{}), nil + //return support.Response(200, map[string]int32{}), nil - return Response(http.StatusNotImplemented, nil), errors.New("GetInventory method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetInventory method not implemented") } // GetOrderById - Find purchase order by ID -func (s *StoreApiService) GetOrderById(ctx context.Context, orderId int64) (ImplResponse, error) { +func (s *StoreApiService) GetOrderById(ctx context.Context, orderId int64) (support.ImplResponse, error) { // TODO - update GetOrderById with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Order{}) or use other options such as http.Ok ... - //return Response(200, Order{}), nil + //return support.Response(200, Order{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("GetOrderById method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetOrderById method not implemented") } // PlaceOrder - Place an order for a pet -func (s *StoreApiService) PlaceOrder(ctx context.Context, order Order) (ImplResponse, error) { +func (s *StoreApiService) PlaceOrder(ctx context.Context, order Order) (support.ImplResponse, error) { // TODO - update PlaceOrder with the required logic for this service method. // Add api_store_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, Order{}) or use other options such as http.Ok ... - //return Response(200, Order{}), nil + //return support.Response(200, Order{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("PlaceOrder method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("PlaceOrder method not implemented") } diff --git a/samples/server/petstore/go-server-required/go/api_user.go b/samples/server/petstore/go-server-required/go/api_user.go index 361e0542e7dc..7b19825ed32b 100644 --- a/samples/server/petstore/go-server-required/go/api_user.go +++ b/samples/server/petstore/go-server-required/go/api_user.go @@ -10,34 +10,36 @@ package petstoreserver import ( - "encoding/json" "net/http" "strings" "github.com/go-chi/chi/v5" + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" + ) // UserApiController binds http requests to an api service and writes the service results to the http response type UserApiController struct { - service UserApiServicer - errorHandler ErrorHandler + service UserApiServicer + errorHandler support.ErrorHandler } // UserApiOption for how the controller is set up. type UserApiOption func(*UserApiController) // WithUserApiErrorHandler inject ErrorHandler into controller -func WithUserApiErrorHandler(h ErrorHandler) UserApiOption { +func WithUserApiErrorHandler(h support.ErrorHandler) UserApiOption { return func(c *UserApiController) { c.errorHandler = h } } // NewUserApiController creates a default api controller -func NewUserApiController(s UserApiServicer, opts ...UserApiOption) Router { +func NewUserApiController(s UserApiServicer, opts ...UserApiOption) support.Router { controller := &UserApiController{ service: s, - errorHandler: DefaultErrorHandler, + errorHandler: support.DefaultErrorHandler, } for _, opt := range opts { @@ -48,8 +50,8 @@ func NewUserApiController(s UserApiServicer, opts ...UserApiOption) Router { } // Routes returns all the api routes for the UserApiController -func (c *UserApiController) Routes() Routes { - return Routes{ +func (c *UserApiController) Routes() support.Routes { + return support.Routes{ { "CreateUser", strings.ToUpper("Post"), @@ -104,10 +106,10 @@ func (c *UserApiController) Routes() Routes { // CreateUser - Create user func (c *UserApiController) CreateUser(w http.ResponseWriter, r *http.Request) { userParam := User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertUserRequired(userParam); err != nil { @@ -121,17 +123,17 @@ func (c *UserApiController) CreateUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // CreateUsersWithArrayInput - Creates list of users with given input array func (c *UserApiController) CreateUsersWithArrayInput(w http.ResponseWriter, r *http.Request) { userParam := []User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } for _, el := range userParam { @@ -147,17 +149,17 @@ func (c *UserApiController) CreateUsersWithArrayInput(w http.ResponseWriter, r * return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // CreateUsersWithListInput - Creates list of users with given input array func (c *UserApiController) CreateUsersWithListInput(w http.ResponseWriter, r *http.Request) { userParam := []User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } for _, el := range userParam { @@ -173,14 +175,14 @@ func (c *UserApiController) CreateUsersWithListInput(w http.ResponseWriter, r *h return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // DeleteUser - Delete user func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - + result, err := c.service.DeleteUser(r.Context(), usernameParam) // If an error occurred, encode the error with the status code if err != nil { @@ -188,14 +190,14 @@ func (c *UserApiController) DeleteUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // GetUserByName - Get user by user name func (c *UserApiController) GetUserByName(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - + result, err := c.service.GetUserByName(r.Context(), usernameParam) // If an error occurred, encode the error with the status code if err != nil { @@ -203,7 +205,7 @@ func (c *UserApiController) GetUserByName(w http.ResponseWriter, r *http.Request return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -219,7 +221,7 @@ func (c *UserApiController) LoginUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } @@ -232,19 +234,19 @@ func (c *UserApiController) LogoutUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } // UpdateUser - Updated user func (c *UserApiController) UpdateUser(w http.ResponseWriter, r *http.Request) { usernameParam := chi.URLParam(r, "username") - + userParam := User{} - d := json.NewDecoder(r.Body) + d := support.NewJSONDecoder(r.Body) d.DisallowUnknownFields() if err := d.Decode(&userParam); err != nil { - c.errorHandler(w, r, &ParsingError{Err: err}, nil) + c.errorHandler(w, r, &support.ParsingError{Err: err}, nil) return } if err := AssertUserRequired(userParam); err != nil { @@ -258,6 +260,6 @@ func (c *UserApiController) UpdateUser(w http.ResponseWriter, r *http.Request) { return } // If no error, encode the body and the result code - EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) + support.EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } diff --git a/samples/server/petstore/go-server-required/go/api_user_service.go b/samples/server/petstore/go-server-required/go/api_user_service.go index 759f1871f28f..d24f3c6084c0 100644 --- a/samples/server/petstore/go-server-required/go/api_user_service.go +++ b/samples/server/petstore/go-server-required/go/api_user_service.go @@ -13,6 +13,9 @@ import ( "context" "errors" "net/http" + + "github.com/GIT_USER_ID/GIT_REPO_ID/support" + ) // UserApiService is a service that implements the logic for the UserApiServicer @@ -27,104 +30,104 @@ func NewUserApiService() UserApiServicer { } // CreateUser - Create user -func (s *UserApiService) CreateUser(ctx context.Context, user User) (ImplResponse, error) { +func (s *UserApiService) CreateUser(ctx context.Context, user User) (support.ImplResponse, error) { // TODO - update CreateUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("CreateUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("CreateUser method not implemented") } // CreateUsersWithArrayInput - Creates list of users with given input array -func (s *UserApiService) CreateUsersWithArrayInput(ctx context.Context, user []User) (ImplResponse, error) { +func (s *UserApiService) CreateUsersWithArrayInput(ctx context.Context, user []User) (support.ImplResponse, error) { // TODO - update CreateUsersWithArrayInput with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithArrayInput method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithArrayInput method not implemented") } // CreateUsersWithListInput - Creates list of users with given input array -func (s *UserApiService) CreateUsersWithListInput(ctx context.Context, user []User) (ImplResponse, error) { +func (s *UserApiService) CreateUsersWithListInput(ctx context.Context, user []User) (support.ImplResponse, error) { // TODO - update CreateUsersWithListInput with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithListInput method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("CreateUsersWithListInput method not implemented") } // DeleteUser - Delete user -func (s *UserApiService) DeleteUser(ctx context.Context, username string) (ImplResponse, error) { +func (s *UserApiService) DeleteUser(ctx context.Context, username string) (support.ImplResponse, error) { // TODO - update DeleteUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("DeleteUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("DeleteUser method not implemented") } // GetUserByName - Get user by user name -func (s *UserApiService) GetUserByName(ctx context.Context, username string) (ImplResponse, error) { +func (s *UserApiService) GetUserByName(ctx context.Context, username string) (support.ImplResponse, error) { // TODO - update GetUserByName with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, User{}) or use other options such as http.Ok ... - //return Response(200, User{}), nil + //return support.Response(200, User{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("GetUserByName method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("GetUserByName method not implemented") } // LoginUser - Logs user into the system -func (s *UserApiService) LoginUser(ctx context.Context, username string, password string) (ImplResponse, error) { +func (s *UserApiService) LoginUser(ctx context.Context, username string, password string) (support.ImplResponse, error) { // TODO - update LoginUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(200, string{}) or use other options such as http.Ok ... - //return Response(200, string{}), nil + //return support.Response(200, string{}), nil //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("LoginUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("LoginUser method not implemented") } // LogoutUser - Logs out current logged in user session -func (s *UserApiService) LogoutUser(ctx context.Context) (ImplResponse, error) { +func (s *UserApiService) LogoutUser(ctx context.Context) (support.ImplResponse, error) { // TODO - update LogoutUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(0, {}) or use other options such as http.Ok ... - //return Response(0, nil),nil + //return support.Response(0, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("LogoutUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("LogoutUser method not implemented") } // UpdateUser - Updated user -func (s *UserApiService) UpdateUser(ctx context.Context, username string, user User) (ImplResponse, error) { +func (s *UserApiService) UpdateUser(ctx context.Context, username string, user User) (support.ImplResponse, error) { // TODO - update UpdateUser with the required logic for this service method. // Add api_user_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //TODO: Uncomment the next line to return response Response(400, {}) or use other options such as http.Ok ... - //return Response(400, nil),nil + //return support.Response(400, nil),nil //TODO: Uncomment the next line to return response Response(404, {}) or use other options such as http.Ok ... - //return Response(404, nil),nil + //return support.Response(404, nil),nil - return Response(http.StatusNotImplemented, nil), errors.New("UpdateUser method not implemented") + return support.Response(http.StatusNotImplemented, nil), errors.New("UpdateUser method not implemented") } diff --git a/samples/server/petstore/go-server-required/go/model_api_response.go b/samples/server/petstore/go-server-required/go/model_api_response.go index 324cfbe08444..37b1391b3200 100644 --- a/samples/server/petstore/go-server-required/go/model_api_response.go +++ b/samples/server/petstore/go-server-required/go/model_api_response.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // ApiResponse - Describes the result of uploading an image resource type ApiResponse struct { @@ -27,10 +31,10 @@ func AssertApiResponseRequired(obj ApiResponse) error { // AssertRecurseApiResponseRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of ApiResponse (e.g. [][]ApiResponse), otherwise ErrTypeAssertionError is thrown. func AssertRecurseApiResponseRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aApiResponse, ok := obj.(ApiResponse) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertApiResponseRequired(aApiResponse) }) diff --git a/samples/server/petstore/go-server-required/go/model_category.go b/samples/server/petstore/go-server-required/go/model_category.go index 3ae01892a3fc..b742f6629e83 100644 --- a/samples/server/petstore/go-server-required/go/model_category.go +++ b/samples/server/petstore/go-server-required/go/model_category.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // Category - A category for a pet type Category struct { @@ -25,10 +29,10 @@ func AssertCategoryRequired(obj Category) error { // AssertRecurseCategoryRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Category (e.g. [][]Category), otherwise ErrTypeAssertionError is thrown. func AssertRecurseCategoryRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aCategory, ok := obj.(Category) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertCategoryRequired(aCategory) }) diff --git a/samples/server/petstore/go-server-required/go/model_order.go b/samples/server/petstore/go-server-required/go/model_order.go index f3441fa8c7b5..8ec2a718a5a6 100644 --- a/samples/server/petstore/go-server-required/go/model_order.go +++ b/samples/server/petstore/go-server-required/go/model_order.go @@ -8,9 +8,9 @@ */ package petstoreserver - import ( "time" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) // Order - An order for a pets from the pet store @@ -39,8 +39,8 @@ func AssertOrderRequired(obj Order) error { "comment": obj.Comment, } for name, el := range elements { - if isZero := IsZeroValue(el); isZero { - return &RequiredError{Field: name} + if isZero := support.IsZeroValue(el); isZero { + return &support.RequiredError{Field: name} } } @@ -54,10 +54,10 @@ func AssertOrderRequired(obj Order) error { // AssertRecurseOrderRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Order (e.g. [][]Order), otherwise ErrTypeAssertionError is thrown. func AssertRecurseOrderRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aOrder, ok := obj.(Order) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertOrderRequired(aOrder) }) diff --git a/samples/server/petstore/go-server-required/go/model_order_info.go b/samples/server/petstore/go-server-required/go/model_order_info.go index 3c6bb2704c94..ce2b1c0f2133 100644 --- a/samples/server/petstore/go-server-required/go/model_order_info.go +++ b/samples/server/petstore/go-server-required/go/model_order_info.go @@ -8,9 +8,9 @@ */ package petstoreserver - import ( "time" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) // OrderInfo - An order info for a pets from the pet store @@ -31,10 +31,10 @@ func AssertOrderInfoRequired(obj OrderInfo) error { // AssertRecurseOrderInfoRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of OrderInfo (e.g. [][]OrderInfo), otherwise ErrTypeAssertionError is thrown. func AssertRecurseOrderInfoRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aOrderInfo, ok := obj.(OrderInfo) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertOrderInfoRequired(aOrderInfo) }) diff --git a/samples/server/petstore/go-server-required/go/model_pet.go b/samples/server/petstore/go-server-required/go/model_pet.go index 5c71af290f61..7b63c10975ce 100644 --- a/samples/server/petstore/go-server-required/go/model_pet.go +++ b/samples/server/petstore/go-server-required/go/model_pet.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // Pet - A pet for sale in the pet store type Pet struct { @@ -33,8 +37,8 @@ func AssertPetRequired(obj Pet) error { "photoUrls": obj.PhotoUrls, } for name, el := range elements { - if isZero := IsZeroValue(el); isZero { - return &RequiredError{Field: name} + if isZero := support.IsZeroValue(el); isZero { + return &support.RequiredError{Field: name} } } @@ -56,10 +60,10 @@ func AssertPetRequired(obj Pet) error { // AssertRecursePetRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Pet (e.g. [][]Pet), otherwise ErrTypeAssertionError is thrown. func AssertRecursePetRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aPet, ok := obj.(Pet) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertPetRequired(aPet) }) diff --git a/samples/server/petstore/go-server-required/go/model_special_info.go b/samples/server/petstore/go-server-required/go/model_special_info.go index 73bea15959c1..ded470786584 100644 --- a/samples/server/petstore/go-server-required/go/model_special_info.go +++ b/samples/server/petstore/go-server-required/go/model_special_info.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // SpecialInfo - An order info for a pets from the pet store type SpecialInfo struct { @@ -25,10 +29,10 @@ func AssertSpecialInfoRequired(obj SpecialInfo) error { // AssertRecurseSpecialInfoRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of SpecialInfo (e.g. [][]SpecialInfo), otherwise ErrTypeAssertionError is thrown. func AssertRecurseSpecialInfoRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aSpecialInfo, ok := obj.(SpecialInfo) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertSpecialInfoRequired(aSpecialInfo) }) diff --git a/samples/server/petstore/go-server-required/go/model_tag.go b/samples/server/petstore/go-server-required/go/model_tag.go index 0631ccc4866f..9a442e48b2ec 100644 --- a/samples/server/petstore/go-server-required/go/model_tag.go +++ b/samples/server/petstore/go-server-required/go/model_tag.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // Tag - A tag for a pet type Tag struct { @@ -25,10 +29,10 @@ func AssertTagRequired(obj Tag) error { // AssertRecurseTagRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of Tag (e.g. [][]Tag), otherwise ErrTypeAssertionError is thrown. func AssertRecurseTagRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aTag, ok := obj.(Tag) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertTagRequired(aTag) }) diff --git a/samples/server/petstore/go-server-required/go/model_user.go b/samples/server/petstore/go-server-required/go/model_user.go index 037b2f1ede62..e1379f2f3307 100644 --- a/samples/server/petstore/go-server-required/go/model_user.go +++ b/samples/server/petstore/go-server-required/go/model_user.go @@ -8,6 +8,10 @@ */ package petstoreserver +import ( + + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" +) // User - A User who is purchasing from the pet store type User struct { @@ -42,8 +46,8 @@ func AssertUserRequired(obj User) error { "deepSliceModel": obj.DeepSliceModel, } for name, el := range elements { - if isZero := IsZeroValue(el); isZero { - return &RequiredError{Field: name} + if isZero := support.IsZeroValue(el); isZero { + return &support.RequiredError{Field: name} } } @@ -58,10 +62,10 @@ func AssertUserRequired(obj User) error { // AssertRecurseUserRequired recursively checks if required fields are not zero-ed in a nested slice. // Accepts only nested slice of User (e.g. [][]User), otherwise ErrTypeAssertionError is thrown. func AssertRecurseUserRequired(objSlice interface{}) error { - return AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { + return support.AssertRecurseInterfaceRequired(objSlice, func(obj interface{}) error { aUser, ok := obj.(User) if !ok { - return ErrTypeAssertionError + return support.ErrTypeAssertionError } return AssertUserRequired(aUser) }) diff --git a/samples/server/petstore/go-server-required/main.go b/samples/server/petstore/go-server-required/main.go index ddc5258297ca..7b22919e9839 100644 --- a/samples/server/petstore/go-server-required/main.go +++ b/samples/server/petstore/go-server-required/main.go @@ -14,6 +14,7 @@ import ( "net/http" petstoreserver "github.com/GIT_USER_ID/GIT_REPO_ID/go" + support "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) func main() { @@ -28,7 +29,7 @@ func main() { UserApiService := petstoreserver.NewUserApiService() UserApiController := petstoreserver.NewUserApiController(UserApiService) - router := petstoreserver.NewRouter(PetApiController, StoreApiController, UserApiController) + router := support.NewRouter(PetApiController, StoreApiController, UserApiController) log.Fatal(http.ListenAndServe(":8080", router)) } diff --git a/samples/server/petstore/go-chi-server/go/error.go b/samples/server/petstore/go-server-required/support/error.go similarity index 98% rename from samples/server/petstore/go-chi-server/go/error.go rename to samples/server/petstore/go-server-required/support/error.go index 2c0b010fe8da..e9c4795ffe3e 100644 --- a/samples/server/petstore/go-chi-server/go/error.go +++ b/samples/server/petstore/go-server-required/support/error.go @@ -7,7 +7,7 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( "errors" diff --git a/samples/server/petstore/go-server-required/go/helpers.go b/samples/server/petstore/go-server-required/support/helpers.go similarity index 70% rename from samples/server/petstore/go-server-required/go/helpers.go rename to samples/server/petstore/go-server-required/support/helpers.go index f18a261018dd..ce5dcce4819e 100644 --- a/samples/server/petstore/go-server-required/go/helpers.go +++ b/samples/server/petstore/go-server-required/support/helpers.go @@ -7,9 +7,12 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( + "encoding/json" + "net/http" + "io" "reflect" ) @@ -62,3 +65,28 @@ func AssertRecurseValueRequired(value reflect.Value, callback func(interface{}) } return nil } + +// EncodeJSONResponse uses the json encoder to write an interface to the http response with an optional status code +func EncodeJSONResponse(i interface{}, status *int, headers map[string][]string, w http.ResponseWriter) error { + wHeader := w.Header() + if headers != nil { + for key, values := range headers { + for _, value := range values { + wHeader.Add(key, value) + } + } + } + wHeader.Set("Content-Type", "application/json; charset=UTF-8") + if status != nil { + w.WriteHeader(*status) + } else { + w.WriteHeader(http.StatusOK) + } + + return json.NewEncoder(w).Encode(i) +} + +// NewJSONDecoder creates a jew json decoder to decode an http body. +func NewJSONDecoder(r io.Reader) *json.Decoder { + return json.NewDecoder(r) +} diff --git a/samples/server/petstore/go-api-server/go/impl.go b/samples/server/petstore/go-server-required/support/impl.go similarity index 94% rename from samples/server/petstore/go-api-server/go/impl.go rename to samples/server/petstore/go-server-required/support/impl.go index 8c72e26a342a..54db797feb04 100644 --- a/samples/server/petstore/go-api-server/go/impl.go +++ b/samples/server/petstore/go-server-required/support/impl.go @@ -7,7 +7,7 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support // ImplResponse response defines an error code with the associated body type ImplResponse struct { diff --git a/samples/server/petstore/go-api-server/go/logger.go b/samples/server/petstore/go-server-required/support/logger.go similarity index 96% rename from samples/server/petstore/go-api-server/go/logger.go rename to samples/server/petstore/go-server-required/support/logger.go index 08cc0ea3f1d2..cb27ef95fd71 100644 --- a/samples/server/petstore/go-api-server/go/logger.go +++ b/samples/server/petstore/go-server-required/support/logger.go @@ -7,7 +7,7 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( "log" diff --git a/samples/server/petstore/go-server-required/go/routers.go b/samples/server/petstore/go-server-required/support/routers.go similarity index 75% rename from samples/server/petstore/go-server-required/go/routers.go rename to samples/server/petstore/go-server-required/support/routers.go index 3213d5dde239..88984b2acb38 100644 --- a/samples/server/petstore/go-server-required/go/routers.go +++ b/samples/server/petstore/go-server-required/support/routers.go @@ -7,10 +7,9 @@ * Generated by: OpenAPI Generator (https://openapi-generator.tech) */ -package petstoreserver +package support import ( - "encoding/json" "errors" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" @@ -55,26 +54,6 @@ func NewRouter(routers ...Router) chi.Router { return router } -// EncodeJSONResponse uses the json encoder to write an interface to the http response with an optional status code -func EncodeJSONResponse(i interface{}, status *int, headers map[string][]string, w http.ResponseWriter) error { - wHeader := w.Header() - if headers != nil { - for key, values := range headers { - for _, value := range values { - wHeader.Add(key, value) - } - } - } - wHeader.Set("Content-Type", "application/json; charset=UTF-8") - if status != nil { - w.WriteHeader(*status) - } else { - w.WriteHeader(http.StatusOK) - } - - return json.NewEncoder(w).Encode(i) -} - // ReadFormFileToTempFile reads file data from a request form and writes it to a temporary file func ReadFormFileToTempFile(r *http.Request, key string) (*os.File, error) { _, fileHeader, err := r.FormFile(key) @@ -131,8 +110,8 @@ func readFileHeaderToTempFile(fileHeader *multipart.FileHeader) (*os.File, error return file, nil } -// parseInt64Parameter parses a string parameter to an int64. -func parseInt64Parameter(param string, required bool) (int64, error) { +// ParseInt64Parameter parses a string parameter to an int64. +func ParseInt64Parameter(param string, required bool) (int64, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -144,8 +123,8 @@ func parseInt64Parameter(param string, required bool) (int64, error) { return strconv.ParseInt(param, 10, 64) } -// parseInt32Parameter parses a string parameter to an int32. -func parseInt32Parameter(param string, required bool) (int32, error) { +// ParseInt32Parameter parses a string parameter to an int32. +func ParseInt32Parameter(param string, required bool) (int32, error) { if param == "" { if required { return 0, errors.New(errMsgRequiredMissing) @@ -162,8 +141,8 @@ func parseInt32Parameter(param string, required bool) (int32, error) { return int32(val), nil } -// parseBoolParameter parses a string parameter to a bool -func parseBoolParameter(param string) (bool, error) { +// ParseBoolParameter parses a string parameter to a bool +func ParseBoolParameter(param string) (bool, error) { val, err := strconv.ParseBool(param) if err != nil { return false, err @@ -172,8 +151,8 @@ func parseBoolParameter(param string) (bool, error) { return bool(val), nil } -// parseInt64ArrayParameter parses a string parameter containing array of values to []int64. -func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { +// ParseInt64ArrayParameter parses a string parameter containing array of values to []int64. +func ParseInt64ArrayParameter(param, delim string, required bool) ([]int64, error) { if param == "" { if required { return nil, errors.New(errMsgRequiredMissing) @@ -196,8 +175,8 @@ func parseInt64ArrayParameter(param, delim string, required bool) ([]int64, erro return ints, nil } -// parseInt32ArrayParameter parses a string parameter containing array of values to []int32. -func parseInt32ArrayParameter(param, delim string, required bool) ([]int32, error) { +// ParseInt32ArrayParameter parses a string parameter containing array of values to []int32. +func ParseInt32ArrayParameter(param, delim string, required bool) ([]int32, error) { if param == "" { if required { return nil, errors.New(errMsgRequiredMissing) @@ -218,4 +197,4 @@ func parseInt32ArrayParameter(param, delim string, required bool) ([]int32, erro } return ints, nil -} \ No newline at end of file +} From 4b3fa4b92a6c56b38183decec94b1e7615477612 Mon Sep 17 00:00:00 2001 From: Kraust Date: Wed, 16 Feb 2022 07:00:00 -0500 Subject: [PATCH 5/9] Added missing sample. --- .../server/petstore/go-api-server/go/api.go | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/samples/server/petstore/go-api-server/go/api.go b/samples/server/petstore/go-api-server/go/api.go index 38d39999266a..fb480bc1e163 100644 --- a/samples/server/petstore/go-api-server/go/api.go +++ b/samples/server/petstore/go-api-server/go/api.go @@ -14,10 +14,13 @@ import ( "net/http" "os" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" + "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) @@ -66,15 +69,15 @@ type UserApiRouter interface { // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. type PetApiServicer interface { - AddPet(context.Context, Pet) (ImplResponse, error) - DeletePet(context.Context, int64, string) (ImplResponse, error) - FindPetsByStatus(context.Context, []string) (ImplResponse, error) + AddPet(context.Context, Pet) (support.ImplResponse, error) + DeletePet(context.Context, int64, string) (support.ImplResponse, error) + FindPetsByStatus(context.Context, []string) (support.ImplResponse, error) // Deprecated - FindPetsByTags(context.Context, []string) (ImplResponse, error) - GetPetById(context.Context, int64) (ImplResponse, error) - UpdatePet(context.Context, Pet) (ImplResponse, error) - UpdatePetWithForm(context.Context, int64, string, string) (ImplResponse, error) - UploadFile(context.Context, int64, string, *os.File) (ImplResponse, error) + FindPetsByTags(context.Context, []string) (support.ImplResponse, error) + GetPetById(context.Context, int64) (support.ImplResponse, error) + UpdatePet(context.Context, Pet) (support.ImplResponse, error) + UpdatePetWithForm(context.Context, int64, string, string) (support.ImplResponse, error) + UploadFile(context.Context, int64, string, *os.File) (support.ImplResponse, error) } @@ -83,10 +86,10 @@ type PetApiServicer interface { // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. type StoreApiServicer interface { - DeleteOrder(context.Context, string) (ImplResponse, error) - GetInventory(context.Context) (ImplResponse, error) - GetOrderById(context.Context, int64) (ImplResponse, error) - PlaceOrder(context.Context, Order) (ImplResponse, error) + DeleteOrder(context.Context, string) (support.ImplResponse, error) + GetInventory(context.Context) (support.ImplResponse, error) + GetOrderById(context.Context, int64) (support.ImplResponse, error) + PlaceOrder(context.Context, Order) (support.ImplResponse, error) } @@ -95,12 +98,12 @@ type StoreApiServicer interface { // while the service implementation can be ignored with the .openapi-generator-ignore file // and updated with the logic required for the API. type UserApiServicer interface { - CreateUser(context.Context, User) (ImplResponse, error) - CreateUsersWithArrayInput(context.Context, []User) (ImplResponse, error) - CreateUsersWithListInput(context.Context, []User) (ImplResponse, error) - DeleteUser(context.Context, string) (ImplResponse, error) - GetUserByName(context.Context, string) (ImplResponse, error) - LoginUser(context.Context, string, string) (ImplResponse, error) - LogoutUser(context.Context) (ImplResponse, error) - UpdateUser(context.Context, string, User) (ImplResponse, error) + CreateUser(context.Context, User) (support.ImplResponse, error) + CreateUsersWithArrayInput(context.Context, []User) (support.ImplResponse, error) + CreateUsersWithListInput(context.Context, []User) (support.ImplResponse, error) + DeleteUser(context.Context, string) (support.ImplResponse, error) + GetUserByName(context.Context, string) (support.ImplResponse, error) + LoginUser(context.Context, string, string) (support.ImplResponse, error) + LogoutUser(context.Context) (support.ImplResponse, error) + UpdateUser(context.Context, string, User) (support.ImplResponse, error) } From ca1f900c3204687fc6887621bd99313f0f9dbcb1 Mon Sep 17 00:00:00 2001 From: Kraust Date: Wed, 16 Feb 2022 07:27:46 -0500 Subject: [PATCH 6/9] Fixed CI issue. --- samples/server/petstore/go-api-server/.openapi-generator/FILES | 1 - samples/server/petstore/go-chi-server/.openapi-generator/FILES | 1 - .../server/petstore/go-server-required/.openapi-generator/FILES | 1 - 3 files changed, 3 deletions(-) diff --git a/samples/server/petstore/go-api-server/.openapi-generator/FILES b/samples/server/petstore/go-api-server/.openapi-generator/FILES index d9579ff9142b..f8bd847b8887 100644 --- a/samples/server/petstore/go-api-server/.openapi-generator/FILES +++ b/samples/server/petstore/go-api-server/.openapi-generator/FILES @@ -1,4 +1,3 @@ -.openapi-generator-ignore Dockerfile README.md api/openapi.yaml diff --git a/samples/server/petstore/go-chi-server/.openapi-generator/FILES b/samples/server/petstore/go-chi-server/.openapi-generator/FILES index d9579ff9142b..f8bd847b8887 100644 --- a/samples/server/petstore/go-chi-server/.openapi-generator/FILES +++ b/samples/server/petstore/go-chi-server/.openapi-generator/FILES @@ -1,4 +1,3 @@ -.openapi-generator-ignore Dockerfile README.md api/openapi.yaml diff --git a/samples/server/petstore/go-server-required/.openapi-generator/FILES b/samples/server/petstore/go-server-required/.openapi-generator/FILES index 24fd7f80dfa2..9d3c0baf489e 100644 --- a/samples/server/petstore/go-server-required/.openapi-generator/FILES +++ b/samples/server/petstore/go-server-required/.openapi-generator/FILES @@ -1,4 +1,3 @@ -.openapi-generator-ignore Dockerfile README.md api/openapi.yaml From 4a81b3b49d8e025ef2360def29b6a521fa1f2d30 Mon Sep 17 00:00:00 2001 From: Kraust Date: Wed, 16 Feb 2022 07:54:53 -0500 Subject: [PATCH 7/9] Fixed redeclared import. --- .../openapi-generator/src/main/resources/go-server/api.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/main/resources/go-server/api.mustache b/modules/openapi-generator/src/main/resources/go-server/api.mustache index 5d7435742a5c..85772a9f221b 100644 --- a/modules/openapi-generator/src/main/resources/go-server/api.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/api.mustache @@ -6,7 +6,7 @@ import ( "net/http"{{#apiInfo}}{{#apis}}{{#imports}} "{{import}}"{{/imports}} - "{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/support" + {{#-first}}"{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/support"{{/-first}} {{#hasDifferentModelDir}}"{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}}{{/apis}}{{/apiInfo}} ) From 24a363bf182bf22bf17f004e7e0156047b8e5a3e Mon Sep 17 00:00:00 2001 From: Kraust Date: Wed, 16 Feb 2022 08:13:48 -0500 Subject: [PATCH 8/9] Fixed import issue. --- .../codegen/languages/GoServerCodegen.java | 31 +++++++++++++++++++ .../src/main/resources/go-server/api.mustache | 7 ++--- .../server/petstore/go-api-server/go/api.go | 7 ----- .../server/petstore/go-chi-server/go/api.go | 7 ----- .../petstore/go-server-required/go/api.go | 7 ----- 5 files changed, 34 insertions(+), 25 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java index bec56dabe2d4..e8763b80678d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java @@ -300,6 +300,37 @@ public Map postProcessOperationsWithModels(Map o return objs; } + @Override + public Map postProcessSupportingFileData(Map objs) { + objs = super.postProcessSupportingFileData(objs); + + Map apiInfo = (Map) objs.get("apiInfo"); + List> apiList = (List>) apiInfo.get("apis"); + for (HashMap api : apiList) { + Map objectMap = (Map) api.get("operations"); + List operations = (List) objectMap.get("operation"); + + boolean addedModelImport = false; + boolean addedSupportImport = false; + for (CodegenOperation operation : operations) { + for (CodegenParameter param : operation.allParams) { + // Always Add the support import + if (!addedSupportImport) { + objs.put("hasSupportDir", true); + addedSupportImport = true; + } + + // import "models" directory if needed + if (!addedModelImport && param.isModel && !modelPackage.equals(apiPackage)) { + objs.put("hasDifferentModelDir", true); + addedModelImport = true; + } + } + } + } + return objs; + } + @Override public String apiPackage() { return sourceFolder; diff --git a/modules/openapi-generator/src/main/resources/go-server/api.mustache b/modules/openapi-generator/src/main/resources/go-server/api.mustache index 85772a9f221b..a5c6e00bd462 100644 --- a/modules/openapi-generator/src/main/resources/go-server/api.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/api.mustache @@ -4,10 +4,9 @@ package {{packageName}} import ( "context" "net/http"{{#apiInfo}}{{#apis}}{{#imports}} - "{{import}}"{{/imports}} - - {{#-first}}"{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/support"{{/-first}} - {{#hasDifferentModelDir}}"{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}}{{/apis}}{{/apiInfo}} + "{{import}}"{{/imports}}{{/apis}}{{/apiInfo}} + {{#hasSupportDir}}"{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/support"{{/hasSupportDir}} + {{#hasDifferentModelDir}}"{{gitHost}}/{{gitUserId}}/{{gitRepoId}}/{{modelPackage}}"{{/hasDifferentModelDir}} ) diff --git a/samples/server/petstore/go-api-server/go/api.go b/samples/server/petstore/go-api-server/go/api.go index fb480bc1e163..b807031a503d 100644 --- a/samples/server/petstore/go-api-server/go/api.go +++ b/samples/server/petstore/go-api-server/go/api.go @@ -13,13 +13,6 @@ import ( "context" "net/http" "os" - - "github.com/GIT_USER_ID/GIT_REPO_ID/support" - - - "github.com/GIT_USER_ID/GIT_REPO_ID/support" - - "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) diff --git a/samples/server/petstore/go-chi-server/go/api.go b/samples/server/petstore/go-chi-server/go/api.go index fb480bc1e163..b807031a503d 100644 --- a/samples/server/petstore/go-chi-server/go/api.go +++ b/samples/server/petstore/go-chi-server/go/api.go @@ -13,13 +13,6 @@ import ( "context" "net/http" "os" - - "github.com/GIT_USER_ID/GIT_REPO_ID/support" - - - "github.com/GIT_USER_ID/GIT_REPO_ID/support" - - "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) diff --git a/samples/server/petstore/go-server-required/go/api.go b/samples/server/petstore/go-server-required/go/api.go index fb480bc1e163..b807031a503d 100644 --- a/samples/server/petstore/go-server-required/go/api.go +++ b/samples/server/petstore/go-server-required/go/api.go @@ -13,13 +13,6 @@ import ( "context" "net/http" "os" - - "github.com/GIT_USER_ID/GIT_REPO_ID/support" - - - "github.com/GIT_USER_ID/GIT_REPO_ID/support" - - "github.com/GIT_USER_ID/GIT_REPO_ID/support" ) From a45236b8b4ee5de50b0f1daf6bfc0dbe855cfe76 Mon Sep 17 00:00:00 2001 From: Kraust Date: Tue, 8 Mar 2022 12:08:51 -0500 Subject: [PATCH 9/9] Fixed formatting issue. --- .../org/openapitools/codegen/languages/GoServerCodegen.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java index e8763b80678d..b9848a734af2 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java @@ -51,7 +51,7 @@ public class GoServerCodegen extends AbstractGoCodegen { protected int serverPort = 8080; protected String projectName = "openapi-server"; protected String sourceFolder = "go"; - protected String supportFolder = "support"; + protected String supportFolder = "support"; protected Boolean corsFeatureEnabled = false; protected Boolean addResponseHeaders = false; @@ -230,7 +230,7 @@ public void processOpts() { routers.put(router, router.equals(propRouter)); } additionalProperties.put("routers", routers); - + if (!additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)) { modelPackage = packageName; }