Skip to content

Commit 77b734e

Browse files
author
Dylan Wilson
committed
We've had a lot of trouble with params moving around as the underlying YML are updated. Here we used named parameter objects to stabilize the params args being passed and make existing code calling us more stable and less prone to drift errors.
1 parent 3f296f9 commit 77b734e

File tree

2 files changed

+30
-23
lines changed

2 files changed

+30
-23
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptNestjsClientCodegen.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,7 @@ public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> o
300300

301301
// Add the more complicated component instead of just the brace.
302302
CodegenParameter parameter = findPathParameterByName(op, parameterName.toString());
303+
pathBuffer.append("params.");
303304
pathBuffer.append(toVarName(parameterName.toString()));
304305
if (parameter != null && parameter.isDateTime) {
305306
pathBuffer.append(".toISOString()");

modules/openapi-generator/src/main/resources/typescript-nestjs/api.service.mustache

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ import { {{classname}}Interface } from './{{classFilename}}Interface';
1414
{{/withInterfaces}}
1515

1616
{{#operations}}
17-
17+
{{#operation}}
18+
type {{nickname}}Params = {
19+
{{#allParams}}
20+
{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}
21+
{{/allParams}}
22+
}
23+
{{/operation}}
1824
{{#description}}
1925
/**
2026
* {{&description}}
@@ -50,21 +56,21 @@ export class {{classname}} {
5056
/**
5157
* {{summary}}
5258
* {{notes}}
53-
{{#allParams}}* @param {{paramName}} {{description}}
54-
{{/allParams}}* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
59+
* @param {{nickname}}Params
60+
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
5561
* @param reportProgress flag to report request and response progress.
5662
*/
57-
public {{nickname}}({{#allParams}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/allParams}}): Observable<AxiosResponse<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>>;
58-
public {{nickname}}({{#allParams}}{{^isConstEnumParam}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/isConstEnumParam}}{{/allParams}}): Observable<any> {
63+
public {{nickname}}(params: {{nickname}}Params): Observable<AxiosResponse<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>>;
64+
public {{nickname}}(params: {{nickname}}Params): Observable<any> {
5965
{{#allParams}}
6066

6167
{{#required}}
6268
{{#isConstEnumParam}}
6369
let {{paramName}} = {{{dataType}}};
6470
{{/isConstEnumParam}}
6571
{{^isConstEnumParam}}
66-
if ({{paramName}} === null || {{paramName}} === undefined) {
67-
throw new Error('Required parameter {{paramName}} was null or undefined when calling {{nickname}}.');
72+
if ( params.{{paramName}} === null || params.{{paramName}} === undefined) {
73+
throw new Error('Required parameter params.{{paramName}} was null or undefined when calling {{nickname}}.');
6874
}
6975
{{/isConstEnumParam}}
7076
{{/required}}
@@ -74,24 +80,24 @@ export class {{classname}} {
7480
let queryParameters = {};
7581
{{#queryParams}}
7682
{{#isListContainer}}
77-
if ({{paramName}}) {
83+
if ( params.{{paramName}}) {
7884
{{#isCollectionFormatMulti}}
79-
{{paramName}}.forEach((element) => {
85+
params.{{paramName}}.forEach((element) => {
8086
queryParameters.append('{{baseName}}', <any>element);
8187
})
8288
{{/isCollectionFormatMulti}}
8389
{{^isCollectionFormatMulti}}
84-
queryParameters['{{baseName}}'] = {{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}']);
90+
queryParameters['{{baseName}}'] = params.{{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}']);
8591
{{/isCollectionFormatMulti}}
8692
}
8793
{{/isListContainer}}
8894
{{^isListContainer}}
89-
if ({{paramName}} !== undefined && {{paramName}} !== null) {
95+
if (params.{{paramName}} !== undefined && params.{{paramName}} !== null) {
9096
{{#isDateTime}}
91-
queryParameters['{{baseName}}'] = (<any>{{paramName}} as any instanceof Date) ? ({{paramName}} as any).toISOString(): {{paramName}};
97+
queryParameters['{{baseName}}'] = (<any>params.{{paramName}} as any instanceof Date) ? (params.{{paramName}} as any).toISOString(): params.{{paramName}};
9298
{{/isDateTime}}
9399
{{^isDateTime}}
94-
queryParameters['{{baseName}}'] = <any>{{paramName}};
100+
queryParameters['{{baseName}}'] = <any>params.{{paramName}};
95101
{{/isDateTime}}
96102
}
97103
{{/isListContainer}}
@@ -101,13 +107,13 @@ export class {{classname}} {
101107
let headers = this.defaultHeaders;
102108
{{#headerParams}}
103109
{{#isListContainer}}
104-
if ({{paramName}}) {
105-
headers['{{baseName}}'] = {{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}']);
110+
if (params.{{paramName}}) {
111+
headers['{{baseName}}'] = params.{{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}']);
106112
}
107113
{{/isListContainer}}
108114
{{^isListContainer}}
109-
if ({{paramName}} !== undefined && {{paramName}} !== null) {
110-
headers['{{baseName}}'] = String({{paramName}});
115+
if (params.{{paramName}} !== undefined && params.{{paramName}} !== null) {
116+
headers['{{baseName}}'] = String(params.{{paramName}});
111117
}
112118
{{/isListContainer}}
113119
{{/headerParams}}
@@ -190,27 +196,27 @@ export class {{classname}} {
190196
{{#formParams}}
191197

192198
{{#isListContainer}}
193-
if ({{paramName}}) {
199+
if (params.{{paramName}}) {
194200
{{#isCollectionFormatMulti}}
195-
{{paramName}}.forEach((element) => {
201+
params.{{paramName}}.forEach((element) => {
196202
formParams.append('{{baseName}}', <any>element);
197203
})
198204
{{/isCollectionFormatMulti}}
199205
{{^isCollectionFormatMulti}}
200-
formParams.append('{{baseName}}', {{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}']));
206+
formParams.append('{{baseName}}', params.{{paramName}}.join(COLLECTION_FORMATS['{{collectionFormat}}']));
201207
{{/isCollectionFormatMulti}}
202208
}
203209
{{/isListContainer}}
204210
{{^isListContainer}}
205-
if ({{paramName}} !== undefined) {
206-
formParams.append('{{baseName}}', <any>{{paramName}});
211+
if (params.{{paramName}} !== undefined) {
212+
formParams.append('{{baseName}}', <any>params.{{paramName}});
207213
}
208214
{{/isListContainer}}
209215
{{/formParams}}
210216

211217
{{/hasFormParams}}
212218
return this.httpClient.{{httpMethod}}{{^isResponseFile}}<{{#returnType}}{{{returnType}}}{{#isResponseTypeFile}}|undefined{{/isResponseTypeFile}}{{/returnType}}{{^returnType}}any{{/returnType}}>{{/isResponseFile}}(`${this.basePath}{{{path}}}`,{{#isBodyAllowed}}
213-
{{#bodyParam}}{{paramName}}{{/bodyParam}}{{^bodyParam}}{{#hasFormParams}}convertFormParamsToString ? formParams.toString() : formParams{{/hasFormParams}}{{^hasFormParams}}null{{/hasFormParams}}{{/bodyParam}},{{/isBodyAllowed}}
219+
{{#bodyParam}}params.{{paramName}}{{/bodyParam}}{{^bodyParam}}{{#hasFormParams}}convertFormParamsToString ? formParams.toString() : formParams{{/hasFormParams}}{{^hasFormParams}}null{{/hasFormParams}}{{/bodyParam}},{{/isBodyAllowed}}
214220
{
215221
{{#hasQueryParams}}
216222
params: queryParameters,

0 commit comments

Comments
 (0)