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 34abbf2941f..70ba7d9983c 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 @@ -295,7 +295,7 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re WithParse[bool](parseBool),{{/required}}{{/defaultValue}} ) if err != nil { - w.WriteHeader(500) + c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } {{/isBoolean}} diff --git a/modules/openapi-generator/src/test/resources/3_0/go-server/petstore.yaml b/modules/openapi-generator/src/test/resources/3_0/go-server/petstore.yaml index 62bade51543..9c440c06a0e 100644 --- a/modules/openapi-generator/src/test/resources/3_0/go-server/petstore.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/go-server/petstore.yaml @@ -710,6 +710,36 @@ paths: items: type: string format: binary + /pets/boolean/parsing: + get: + tags: + - pet + summary: Get the pets by only using boolean query parameters + operationId: GetPetsUsingBooleanQueryParameters + parameters: + - in: query + name: expr + required: true + schema: + type: boolean + - in: query + name: grouping + required: false + schema: + type: boolean + - in: query + name: inactive + required: false + schema: + type: boolean + default: false + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponse' externalDocs: description: Find out more about Swagger url: 'http://swagger.io' diff --git a/samples/openapi3/server/petstore/go/go-petstore/go/api_user.go b/samples/openapi3/server/petstore/go/go-petstore/go/api_user.go index 45b17d50303..88a9e8643e2 100644 --- a/samples/openapi3/server/petstore/go/go-petstore/go/api_user.go +++ b/samples/openapi3/server/petstore/go/go-petstore/go/api_user.go @@ -179,7 +179,7 @@ func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) { WithParse[bool](parseBool), ) if err != nil { - w.WriteHeader(500) + c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } result, err := c.service.DeleteUser(r.Context(), usernameParam, booleanTestParam) @@ -247,7 +247,7 @@ func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) { WithParse[bool](parseBool), ) if err != nil { - w.WriteHeader(500) + c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } result, err := c.service.LoginUser(r.Context(), usernameParam, passwordParam, int32TestParam, int64TestParam, float32TestParam, float64TestParam, booleanTestParam) diff --git a/samples/server/petstore/go-api-server/api/openapi.yaml b/samples/server/petstore/go-api-server/api/openapi.yaml index c835943823d..d1f9d616206 100644 --- a/samples/server/petstore/go-api-server/api/openapi.yaml +++ b/samples/server/petstore/go-api-server/api/openapi.yaml @@ -725,6 +725,42 @@ paths: summary: uploads images (array of files) tags: - pet + /pets/boolean/parsing: + get: + operationId: GetPetsUsingBooleanQueryParameters + parameters: + - explode: true + in: query + name: expr + required: true + schema: + type: boolean + style: form + - explode: true + in: query + name: grouping + required: false + schema: + type: boolean + style: form + - explode: true + in: query + name: inactive + required: false + schema: + default: false + type: boolean + style: form + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponse' + description: successful operation + summary: Get the pets by only using boolean query parameters + tags: + - pet components: requestBodies: UserArray: diff --git a/samples/server/petstore/go-api-server/go/api.go b/samples/server/petstore/go-api-server/go/api.go index 9f7cac7f6ac..5f7841c33a7 100644 --- a/samples/server/petstore/go-api-server/go/api.go +++ b/samples/server/petstore/go-api-server/go/api.go @@ -30,6 +30,7 @@ type PetAPIRouter interface { FindPetsByTags(http.ResponseWriter, *http.Request) GetPetById(http.ResponseWriter, *http.Request) GetPetImageById(http.ResponseWriter, *http.Request) + GetPetsUsingBooleanQueryParameters(http.ResponseWriter, *http.Request) UpdatePet(http.ResponseWriter, *http.Request) UpdatePetWithForm(http.ResponseWriter, *http.Request) UploadFile(http.ResponseWriter, *http.Request) @@ -72,6 +73,7 @@ type PetAPIServicer interface { FindPetsByTags(context.Context, []string, time.Time, time.Time) (ImplResponse, error) GetPetById(context.Context, int64) (ImplResponse, error) GetPetImageById(context.Context, int64) (ImplResponse, error) + GetPetsUsingBooleanQueryParameters(context.Context, bool, bool, bool) (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) 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 7818abb84d7..7a86c2e82b0 100644 --- a/samples/server/petstore/go-api-server/go/api_pet.go +++ b/samples/server/petstore/go-api-server/go/api_pet.go @@ -85,6 +85,11 @@ func (c *PetAPIController) Routes() Routes { "/v2/pet/{petId}/uploadImage", c.GetPetImageById, }, + "GetPetsUsingBooleanQueryParameters": Route{ + strings.ToUpper("Get"), + "/v2/pets/boolean/parsing", + c.GetPetsUsingBooleanQueryParameters, + }, "UpdatePet": Route{ strings.ToUpper("Put"), "/v2/pet", @@ -289,6 +294,43 @@ func (c *PetAPIController) GetPetImageById(w http.ResponseWriter, r *http.Reques EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } +// GetPetsUsingBooleanQueryParameters - Get the pets by only using boolean query parameters +func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWriter, r *http.Request) { + query := r.URL.Query() + exprParam, err := parseBoolParameter( + query.Get("expr"), + WithRequire[bool](parseBool), + ) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + groupingParam, err := parseBoolParameter( + query.Get("grouping"), + WithParse[bool](parseBool), + ) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + inactiveParam, err := parseBoolParameter( + query.Get("inactive"), + WithDefaultOrParse[bool](false, parseBool), + ) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + result, err := c.service.GetPetsUsingBooleanQueryParameters(r.Context(), exprParam, groupingParam, inactiveParam) + // 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) +} + // UpdatePet - Update an existing pet func (c *PetAPIController) UpdatePet(w http.ResponseWriter, r *http.Request) { petParam := Pet{} 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 710a4576cd8..35f250870f7 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 @@ -130,6 +130,17 @@ func (s *PetAPIService) GetPetImageById(ctx context.Context, petId int64) (ImplR return Response(http.StatusNotImplemented, nil), errors.New("GetPetImageById method not implemented") } +// GetPetsUsingBooleanQueryParameters - Get the pets by only using boolean query parameters +func (s *PetAPIService) GetPetsUsingBooleanQueryParameters(ctx context.Context, expr bool, grouping bool, inactive bool) (ImplResponse, error) { + // TODO - update GetPetsUsingBooleanQueryParameters 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 Response(http.StatusNotImplemented, nil), errors.New("GetPetsUsingBooleanQueryParameters method not implemented") +} + // UpdatePet - Update an existing pet func (s *PetAPIService) UpdatePet(ctx context.Context, pet Pet) (ImplResponse, error) { // TODO - update UpdatePet with the required logic for this service method. 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 cb2aff7dd43..966c5e6ceb6 100644 --- a/samples/server/petstore/go-api-server/go/api_user.go +++ b/samples/server/petstore/go-api-server/go/api_user.go @@ -180,7 +180,7 @@ func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) { WithParse[bool](parseBool), ) if err != nil { - w.WriteHeader(500) + c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } result, err := c.service.DeleteUser(r.Context(), usernameParam, booleanTestParam) @@ -217,7 +217,7 @@ func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) { WithParse[bool](parseBool), ) if err != nil { - w.WriteHeader(500) + c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } result, err := c.service.LoginUser(r.Context(), usernameParam, passwordParam, booleanTestParam) diff --git a/samples/server/petstore/go-chi-server/api/openapi.yaml b/samples/server/petstore/go-chi-server/api/openapi.yaml index c835943823d..d1f9d616206 100644 --- a/samples/server/petstore/go-chi-server/api/openapi.yaml +++ b/samples/server/petstore/go-chi-server/api/openapi.yaml @@ -725,6 +725,42 @@ paths: summary: uploads images (array of files) tags: - pet + /pets/boolean/parsing: + get: + operationId: GetPetsUsingBooleanQueryParameters + parameters: + - explode: true + in: query + name: expr + required: true + schema: + type: boolean + style: form + - explode: true + in: query + name: grouping + required: false + schema: + type: boolean + style: form + - explode: true + in: query + name: inactive + required: false + schema: + default: false + type: boolean + style: form + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponse' + description: successful operation + summary: Get the pets by only using boolean query parameters + tags: + - pet components: requestBodies: UserArray: diff --git a/samples/server/petstore/go-chi-server/go/api.go b/samples/server/petstore/go-chi-server/go/api.go index 9f7cac7f6ac..5f7841c33a7 100644 --- a/samples/server/petstore/go-chi-server/go/api.go +++ b/samples/server/petstore/go-chi-server/go/api.go @@ -30,6 +30,7 @@ type PetAPIRouter interface { FindPetsByTags(http.ResponseWriter, *http.Request) GetPetById(http.ResponseWriter, *http.Request) GetPetImageById(http.ResponseWriter, *http.Request) + GetPetsUsingBooleanQueryParameters(http.ResponseWriter, *http.Request) UpdatePet(http.ResponseWriter, *http.Request) UpdatePetWithForm(http.ResponseWriter, *http.Request) UploadFile(http.ResponseWriter, *http.Request) @@ -72,6 +73,7 @@ type PetAPIServicer interface { FindPetsByTags(context.Context, []string, time.Time, time.Time) (ImplResponse, error) GetPetById(context.Context, int64) (ImplResponse, error) GetPetImageById(context.Context, int64) (ImplResponse, error) + GetPetsUsingBooleanQueryParameters(context.Context, bool, bool, bool) (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) 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 7da84107257..ddf324752be 100644 --- a/samples/server/petstore/go-chi-server/go/api_pet.go +++ b/samples/server/petstore/go-chi-server/go/api_pet.go @@ -85,6 +85,11 @@ func (c *PetAPIController) Routes() Routes { "/v2/pet/{petId}/uploadImage", c.GetPetImageById, }, + "GetPetsUsingBooleanQueryParameters": Route{ + strings.ToUpper("Get"), + "/v2/pets/boolean/parsing", + c.GetPetsUsingBooleanQueryParameters, + }, "UpdatePet": Route{ strings.ToUpper("Put"), "/v2/pet", @@ -285,6 +290,43 @@ func (c *PetAPIController) GetPetImageById(w http.ResponseWriter, r *http.Reques EncodeJSONResponse(result.Body, &result.Code, result.Headers, w) } +// GetPetsUsingBooleanQueryParameters - Get the pets by only using boolean query parameters +func (c *PetAPIController) GetPetsUsingBooleanQueryParameters(w http.ResponseWriter, r *http.Request) { + query := r.URL.Query() + exprParam, err := parseBoolParameter( + query.Get("expr"), + WithRequire[bool](parseBool), + ) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + groupingParam, err := parseBoolParameter( + query.Get("grouping"), + WithParse[bool](parseBool), + ) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + inactiveParam, err := parseBoolParameter( + query.Get("inactive"), + WithDefaultOrParse[bool](false, parseBool), + ) + if err != nil { + c.errorHandler(w, r, &ParsingError{Err: err}, nil) + return + } + result, err := c.service.GetPetsUsingBooleanQueryParameters(r.Context(), exprParam, groupingParam, inactiveParam) + // 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) +} + // UpdatePet - Update an existing pet func (c *PetAPIController) UpdatePet(w http.ResponseWriter, r *http.Request) { petParam := Pet{} 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 710a4576cd8..35f250870f7 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 @@ -130,6 +130,17 @@ func (s *PetAPIService) GetPetImageById(ctx context.Context, petId int64) (ImplR return Response(http.StatusNotImplemented, nil), errors.New("GetPetImageById method not implemented") } +// GetPetsUsingBooleanQueryParameters - Get the pets by only using boolean query parameters +func (s *PetAPIService) GetPetsUsingBooleanQueryParameters(ctx context.Context, expr bool, grouping bool, inactive bool) (ImplResponse, error) { + // TODO - update GetPetsUsingBooleanQueryParameters 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 Response(http.StatusNotImplemented, nil), errors.New("GetPetsUsingBooleanQueryParameters method not implemented") +} + // UpdatePet - Update an existing pet func (s *PetAPIService) UpdatePet(ctx context.Context, pet Pet) (ImplResponse, error) { // TODO - update UpdatePet with the required logic for this service method. 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 8cfdb13a4a6..6401d90e4c4 100644 --- a/samples/server/petstore/go-chi-server/go/api_user.go +++ b/samples/server/petstore/go-chi-server/go/api_user.go @@ -179,7 +179,7 @@ func (c *UserAPIController) DeleteUser(w http.ResponseWriter, r *http.Request) { WithParse[bool](parseBool), ) if err != nil { - w.WriteHeader(500) + c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } result, err := c.service.DeleteUser(r.Context(), usernameParam, booleanTestParam) @@ -215,7 +215,7 @@ func (c *UserAPIController) LoginUser(w http.ResponseWriter, r *http.Request) { WithParse[bool](parseBool), ) if err != nil { - w.WriteHeader(500) + c.errorHandler(w, r, &ParsingError{Err: err}, nil) return } result, err := c.service.LoginUser(r.Context(), usernameParam, passwordParam, booleanTestParam)