diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java index 8a02f021dd..0c451019b9 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java @@ -4,7 +4,8 @@ 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.parameters.Parameter; import io.swagger.v3.oas.models.Operation; import io.swagger.v3.oas.models.servers.Server; @@ -18,4 +19,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 + 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"); + } } diff --git a/specs/common/schemas/CustomRequest.yml b/specs/common/schemas/CustomRequest.yml index 052ed7e383..77413a54cd 100644 --- a/specs/common/schemas/CustomRequest.yml +++ b/specs/common/schemas/CustomRequest.yml @@ -35,7 +35,7 @@ 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 + additionalProperties: true diff --git a/templates/java/libraries/okhttp-gson/api.mustache b/templates/java/libraries/okhttp-gson/api.mustache index 4b0b5a2afa..a74df90a1e 100644 --- a/templates/java/libraries/okhttp-gson/api.mustache +++ b/templates/java/libraries/okhttp-gson/api.mustache @@ -119,18 +119,25 @@ 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}} + for (Map.Entry parameter : parameters.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..83a0c2909b 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}}{{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}}{}; + + {{^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}}