From 0f4cbce884a4db331f5eb7960c4f04ae7f892391 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Vannicatte?= Date: Mon, 4 Apr 2022 18:57:12 +0200 Subject: [PATCH 1/5] fix(templates): fix wrong query parameters --- specs/common/schemas/CustomRequest.yml | 5 ++--- .../java/libraries/okhttp-gson/api.mustache | 17 ++++++++++++++--- templates/javascript/api-single.mustache | 18 ++++++++++-------- templates/php/api.mustache | 6 +++--- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/specs/common/schemas/CustomRequest.yml b/specs/common/schemas/CustomRequest.yml index 052ed7e383..3a58b95272 100644 --- a/specs/common/schemas/CustomRequest.yml +++ b/specs/common/schemas/CustomRequest.yml @@ -35,7 +35,6 @@ PathInPath: Parameters: name: parameters in: query - description: URL-encoded query string. Force some query parameters to be applied for each query made with this API key. + description: Query parameters to be applied to the current query. schema: - type: string - example: '?query=mySearchQuery&hitsPerPage=10' + type: object diff --git a/templates/java/libraries/okhttp-gson/api.mustache b/templates/java/libraries/okhttp-gson/api.mustache index 4b0b5a2afa..b67505c8c9 100644 --- a/templates/java/libraries/okhttp-gson/api.mustache +++ b/templates/java/libraries/okhttp-gson/api.mustache @@ -119,18 +119,29 @@ public class {{classname}} extends ApiClient { {{javaUtilPrefix}}List queryParams = new {{javaUtilPrefix}}ArrayList(); {{javaUtilPrefix}}Map headers = new {{javaUtilPrefix}}HashMap(); - {{#queryParams}} + {{#vendorExtensions}}{{#queryParams}} if ({{paramName}} != null) { + {{^x-is-custom-request}} queryParams.addAll(this.parameterToPair("{{baseName}}", {{paramName}})); + {{/x-is-custom-request}} + {{#x-is-custom-request}} + if (parameters instanceof Map) { + Map mapParameters = (Map) parameters; + + for (Map.Entry parameter : mapParameters.entrySet()) { + queryParams.addAll(this.parameterToPair(parameter.getKey(), parameter.getValue().toString())); + } + } + {{/x-is-custom-request}} } - {{/queryParams}} + {{/queryParams}}{{/vendorExtensions}} {{#headerParams}} if ({{paramName}} != null) { headers.put("{{baseName}}", this.parameterToString({{paramName}})); } - {{/headerParams}} + {{/headerParams}} headers.put("Accept", "application/json"); headers.put("Content-Type", "application/json"); diff --git a/templates/javascript/api-single.mustache b/templates/javascript/api-single.mustache index 35e18d6266..a3e9dc6344 100644 --- a/templates/javascript/api-single.mustache +++ b/templates/javascript/api-single.mustache @@ -202,12 +202,6 @@ export function create{{capitalizedApiName}}Api(options: CreateClientOptions{{#h {{/allParams.0}} requestOptions?: RequestOptions ) : Promise<{{{returnType}}}> { - const requestPath = '{{{path}}}'{{#vendorExtensions}}{{#pathParams}}.replace( - {{=<% %>=}}'{<%baseName%>}'<%={{ }}=%>,{{#x-is-custom-request}}String({{paramName}}){{/x-is-custom-request}}{{^x-is-custom-request}}encodeURIComponent(String({{paramName}})){{/x-is-custom-request}} - ){{/pathParams}}{{/vendorExtensions}}; - const headers: Headers = {}; - const queryParameters: QueryParameters = {}; - {{#allParams}} {{#required}} if ({{#isBoolean}}{{paramName}} === null || {{paramName}} === undefined{{/isBoolean}}{{^isBoolean}}!{{paramName}}{{/isBoolean}}) { @@ -224,12 +218,20 @@ export function create{{capitalizedApiName}}Api(options: CreateClientOptions{{#h {{/required}} {{/allParams}} - {{#queryParams}} + + const requestPath = '{{{path}}}'{{#vendorExtensions}}{{#pathParams}}.replace( + {{=<% %>=}}'{<%baseName%>}'<%={{ }}=%>,{{#x-is-custom-request}}String({{paramName}}){{/x-is-custom-request}}{{^x-is-custom-request}}encodeURIComponent(String({{paramName}})){{/x-is-custom-request}} + ){{/pathParams}}{{/vendorExtensions}}; + const headers: Headers = {}; + const queryParameters: QueryParameters = {{#vendorExtensions.x-is-custom-request}}parameters || {{/vendorExtensions.x-is-custom-request}}{}; + + {{^vendorExtensions.x-is-custom-request}}{{#queryParams}} if ({{paramName}} !== undefined) { queryParameters['{{baseName}}'] = {{paramName}}.toString(); } - {{/queryParams}} + {{/queryParams}}{{/vendorExtensions.x-is-custom-request}} + {{#headerParams}} headers['{{baseName}}'] = {{paramName}}; {{/headerParams}} diff --git a/templates/php/api.mustache b/templates/php/api.mustache index efaf6311f5..cc02efdefe 100644 --- a/templates/php/api.mustache +++ b/templates/php/api.mustache @@ -203,7 +203,7 @@ use {{invokerPackage}}\RetryStrategy\ClusterHosts; $resourcePath = '{{{path}}}'; $queryParams = []; $httpBody = []; - {{#queryParams}} + {{#vendorExtensions}}{{#queryParams}} {{#isExplode}} if (${{paramName}} !== null) { @@ -214,7 +214,7 @@ use {{invokerPackage}}\RetryStrategy\ClusterHosts; } } else { - $queryParams['{{baseName}}'] = ${{paramName}}; + $queryParams{{^x-is-custom-request}}['{{baseName}}']{{/x-is-custom-request}} = ${{paramName}}; } {{/style}} {{^style}} @@ -230,7 +230,7 @@ use {{invokerPackage}}\RetryStrategy\ClusterHosts; $queryParams['{{baseName}}'] = ${{paramName}}; } {{/isExplode}} - {{/queryParams}} + {{/queryParams}}{{/vendorExtensions}} {{#vendorExtensions}}{{#pathParams}} // path params {{#collectionFormat}} From e56272760a8c105d0182a920fe6674d76dff6d3b Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Tue, 5 Apr 2022 11:30:16 +0200 Subject: [PATCH 2/5] handle special case for js --- .../algolia/codegen/AlgoliaJavascriptGenerator.java | 11 +++++++++++ specs/common/schemas/CustomRequest.yml | 1 + 2 files changed, 12 insertions(+) diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java index 8a02f021dd..ec20b49c6d 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java @@ -4,6 +4,9 @@ import org.openapitools.codegen.CodegenOperation; import org.openapitools.codegen.languages.TypeScriptNodeClientCodegen; +import io.swagger.v3.oas.models.media.Schema; +import io.swagger.v3.oas.models.media.ArraySchema; +import org.openapitools.codegen.utils.ModelUtils; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.servers.Server; @@ -18,4 +21,12 @@ public String getName() { public CodegenOperation fromOperation(String path, String httpMethod, Operation operation, List servers) { return Utils.specifyCustomRequest(super.fromOperation(path, httpMethod, operation, servers)); } + + @Override + public String getTypeDeclaration(Schema p) { + String type = super.getTypeDeclaration(p); + // openapi generator is wrong, 'object' is not a fit all object, we need 'any' + // we use replace because there might be more to this type, like '| undefined' + return type.replace("{ [key: string]: object; }", "Record"); + } } diff --git a/specs/common/schemas/CustomRequest.yml b/specs/common/schemas/CustomRequest.yml index 3a58b95272..77413a54cd 100644 --- a/specs/common/schemas/CustomRequest.yml +++ b/specs/common/schemas/CustomRequest.yml @@ -38,3 +38,4 @@ Parameters: description: Query parameters to be applied to the current query. schema: type: object + additionalProperties: true From 0455755be2c70c2e69828c539b1a26a1d3ab5e06 Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Tue, 5 Apr 2022 11:36:59 +0200 Subject: [PATCH 3/5] real fix --- .../algolia/codegen/AlgoliaJavascriptGenerator.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java index ec20b49c6d..0c451019b9 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java @@ -5,9 +5,7 @@ import org.openapitools.codegen.CodegenOperation; import org.openapitools.codegen.languages.TypeScriptNodeClientCodegen; import io.swagger.v3.oas.models.media.Schema; -import io.swagger.v3.oas.models.media.ArraySchema; -import org.openapitools.codegen.utils.ModelUtils; - +import io.swagger.v3.oas.models.parameters.Parameter; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.servers.Server; @@ -23,10 +21,10 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation } @Override - public String getTypeDeclaration(Schema p) { - String type = super.getTypeDeclaration(p); + protected String getParameterDataType(Parameter parameter, Schema p) { + String type = super.getParameterDataType(parameter, p); // openapi generator is wrong, 'object' is not a fit all object, we need 'any' // we use replace because there might be more to this type, like '| undefined' - return type.replace("{ [key: string]: object; }", "Record"); + return type.replace("{ [key: string]: object; }", "Record"); } } From aeec2fbd7b610836e466a92176359be1d1680697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Vannicatte?= Date: Tue, 5 Apr 2022 12:23:00 +0200 Subject: [PATCH 4/5] remove if and string cast --- templates/java/libraries/okhttp-gson/api.mustache | 8 +++----- templates/javascript/api-single.mustache | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/templates/java/libraries/okhttp-gson/api.mustache b/templates/java/libraries/okhttp-gson/api.mustache index b67505c8c9..f4d7eea35b 100644 --- a/templates/java/libraries/okhttp-gson/api.mustache +++ b/templates/java/libraries/okhttp-gson/api.mustache @@ -125,12 +125,10 @@ public class {{classname}} extends ApiClient { queryParams.addAll(this.parameterToPair("{{baseName}}", {{paramName}})); {{/x-is-custom-request}} {{#x-is-custom-request}} - if (parameters instanceof Map) { - Map mapParameters = (Map) parameters; + Map mapParameters = (Map) parameters; - for (Map.Entry parameter : mapParameters.entrySet()) { - queryParams.addAll(this.parameterToPair(parameter.getKey(), parameter.getValue().toString())); - } + for (Map.Entry parameter : mapParameters.entrySet()) { + queryParams.addAll(this.parameterToPair(parameter.getKey(), parameter.getValue().toString())); } {{/x-is-custom-request}} } diff --git a/templates/javascript/api-single.mustache b/templates/javascript/api-single.mustache index a3e9dc6344..83a0c2909b 100644 --- a/templates/javascript/api-single.mustache +++ b/templates/javascript/api-single.mustache @@ -220,7 +220,7 @@ export function create{{capitalizedApiName}}Api(options: CreateClientOptions{{#h {{/allParams}} const requestPath = '{{{path}}}'{{#vendorExtensions}}{{#pathParams}}.replace( - {{=<% %>=}}'{<%baseName%>}'<%={{ }}=%>,{{#x-is-custom-request}}String({{paramName}}){{/x-is-custom-request}}{{^x-is-custom-request}}encodeURIComponent(String({{paramName}})){{/x-is-custom-request}} + {{=<% %>=}}'{<%baseName%>}'<%={{ }}=%>,{{#x-is-custom-request}}{{paramName}}{{/x-is-custom-request}}{{^x-is-custom-request}}encodeURIComponent({{paramName}}){{/x-is-custom-request}} ){{/pathParams}}{{/vendorExtensions}}; const headers: Headers = {}; const queryParameters: QueryParameters = {{#vendorExtensions.x-is-custom-request}}parameters || {{/vendorExtensions.x-is-custom-request}}{}; From 24f96c2eca6ab9febdfe48187fd356171aff76d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Vannicatte?= Date: Tue, 5 Apr 2022 12:38:30 +0200 Subject: [PATCH 5/5] remove tmp var --- templates/java/libraries/okhttp-gson/api.mustache | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/templates/java/libraries/okhttp-gson/api.mustache b/templates/java/libraries/okhttp-gson/api.mustache index f4d7eea35b..a74df90a1e 100644 --- a/templates/java/libraries/okhttp-gson/api.mustache +++ b/templates/java/libraries/okhttp-gson/api.mustache @@ -125,9 +125,7 @@ public class {{classname}} extends ApiClient { queryParams.addAll(this.parameterToPair("{{baseName}}", {{paramName}})); {{/x-is-custom-request}} {{#x-is-custom-request}} - Map mapParameters = (Map) parameters; - - for (Map.Entry parameter : mapParameters.entrySet()) { + for (Map.Entry parameter : parameters.entrySet()) { queryParams.addAll(this.parameterToPair(parameter.getKey(), parameter.getValue().toString())); } {{/x-is-custom-request}}