Skip to content

Commit

Permalink
[Go][Server] FormParams - Generic Array Type Handling (#17001)
Browse files Browse the repository at this point in the history
* If a form param is an array and isn't caught in the previous checks, treat it as a slice of strings.

* Add an example of a FormParam that is an array
  • Loading branch information
icubbon authored Nov 8, 2023
1 parent e950707 commit 291ce35
Show file tree
Hide file tree
Showing 10 changed files with 32 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -495,7 +495,12 @@ func (c *{{classname}}Controller) {{nickname}}(w http.ResponseWriter, r *http.Re
{{/isArray}}{{/isInteger}}
{{^isFile}}
{{^isLong}}
{{#isArray}}
{{paramName}}Param := strings.Split(r.FormValue("{{baseName}}"), ",")
{{/isArray}}
{{^isArray}}
{{paramName}}Param := r.FormValue("{{baseName}}")
{{/isArray}}
{{/isLong}}
{{/isFile}}
{{/isFormParam}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,11 @@ paths:
additionalMetadata:
description: Additional data to pass to server
type: string
extraOptionalMetadata:
description: More data to pass to server
type: array
items:
type: string
file:
description: file to upload
type: string
Expand Down
5 changes: 5 additions & 0 deletions samples/server/petstore/go-api-server/api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1194,6 +1194,11 @@ components:
additionalMetadata:
description: Additional data to pass to server
type: string
extraOptionalMetadata:
description: More data to pass to server
items:
type: string
type: array
file:
description: file to upload
format: binary
Expand Down
2 changes: 1 addition & 1 deletion samples/server/petstore/go-api-server/go/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ type PetAPIServicer interface {
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)
UploadFile(context.Context, int64, string, []string, *os.File) (ImplResponse, error)
UploadFileArrayOfFiles(context.Context, int64, string, []*os.File) (ImplResponse, error)
}

Expand Down
5 changes: 4 additions & 1 deletion samples/server/petstore/go-api-server/go/api_pet.go
Original file line number Diff line number Diff line change
Expand Up @@ -407,14 +407,17 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {


additionalMetadataParam := r.FormValue("additionalMetadata")


extraOptionalMetadataParam := strings.Split(r.FormValue("extraOptionalMetadata"), ",")
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, extraOptionalMetadataParam, fileParam)
// If an error occurred, encode the error with the status code
if err != nil {
c.errorHandler(w, r, err, &result)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ func (s *PetAPIService) UpdatePetWithForm(ctx context.Context, petId int64, name
}

// 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, extraOptionalMetadata []string, file *os.File) (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.

Expand Down
5 changes: 5 additions & 0 deletions samples/server/petstore/go-chi-server/api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1194,6 +1194,11 @@ components:
additionalMetadata:
description: Additional data to pass to server
type: string
extraOptionalMetadata:
description: More data to pass to server
items:
type: string
type: array
file:
description: file to upload
format: binary
Expand Down
2 changes: 1 addition & 1 deletion samples/server/petstore/go-chi-server/go/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ type PetAPIServicer interface {
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)
UploadFile(context.Context, int64, string, []string, *os.File) (ImplResponse, error)
UploadFileArrayOfFiles(context.Context, int64, string, []*os.File) (ImplResponse, error)
}

Expand Down
5 changes: 4 additions & 1 deletion samples/server/petstore/go-chi-server/go/api_pet.go
Original file line number Diff line number Diff line change
Expand Up @@ -401,14 +401,17 @@ func (c *PetAPIController) UploadFile(w http.ResponseWriter, r *http.Request) {


additionalMetadataParam := r.FormValue("additionalMetadata")


extraOptionalMetadataParam := strings.Split(r.FormValue("extraOptionalMetadata"), ",")
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, extraOptionalMetadataParam, fileParam)
// If an error occurred, encode the error with the status code
if err != nil {
c.errorHandler(w, r, err, &result)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ func (s *PetAPIService) UpdatePetWithForm(ctx context.Context, petId int64, name
}

// 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, extraOptionalMetadata []string, file *os.File) (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.

Expand Down

0 comments on commit 291ce35

Please sign in to comment.