- Fixed reusable request body issue #359

This commit is contained in:
Ferdi Koomen 2020-09-22 22:24:10 +02:00
parent e0c2b799e4
commit 12c46cf686
4 changed files with 45 additions and 41 deletions

View File

@ -19,41 +19,41 @@ export function getOperationParameters(openApi: OpenApi, parameters: OpenApiPara
// Iterate over the parameters
parameters.forEach(parameterOrReference => {
const parameter = getRef<OpenApiParameter>(openApi, parameterOrReference);
const param = getOperationParameter(openApi, parameter);
const parameterDef = getRef<OpenApiParameter>(openApi, parameterOrReference);
const parameter = getOperationParameter(openApi, parameterDef);
// We ignore the "api-version" param, since we do not want to add this
// as the first / default parameter for each of the service calls.
if (param.prop !== 'api-version') {
if (parameter.prop !== 'api-version') {
switch (parameter.in) {
case 'path':
operationParameters.parametersPath.push(param);
operationParameters.parameters.push(param);
operationParameters.imports.push(...param.imports);
operationParameters.parametersPath.push(parameter);
operationParameters.parameters.push(parameter);
operationParameters.imports.push(...parameter.imports);
break;
case 'query':
operationParameters.parametersQuery.push(param);
operationParameters.parameters.push(param);
operationParameters.imports.push(...param.imports);
operationParameters.parametersQuery.push(parameter);
operationParameters.parameters.push(parameter);
operationParameters.imports.push(...parameter.imports);
break;
case 'header':
operationParameters.parametersHeader.push(param);
operationParameters.parameters.push(param);
operationParameters.imports.push(...param.imports);
operationParameters.parametersHeader.push(parameter);
operationParameters.parameters.push(parameter);
operationParameters.imports.push(...parameter.imports);
break;
case 'formData':
operationParameters.parametersForm.push(param);
operationParameters.parameters.push(param);
operationParameters.imports.push(...param.imports);
operationParameters.parametersForm.push(parameter);
operationParameters.parameters.push(parameter);
operationParameters.imports.push(...parameter.imports);
break;
case 'body':
operationParameters.parametersBody = param;
operationParameters.parameters.push(param);
operationParameters.imports.push(...param.imports);
operationParameters.parametersBody = parameter;
operationParameters.parameters.push(parameter);
operationParameters.imports.push(...parameter.imports);
break;
}
}

View File

@ -2,6 +2,7 @@ import { Operation } from '../../../client/interfaces/Operation';
import { OperationParameters } from '../../../client/interfaces/OperationParameters';
import { OpenApi } from '../interfaces/OpenApi';
import { OpenApiOperation } from '../interfaces/OpenApiOperation';
import { OpenApiRequestBody } from '../interfaces/OpenApiRequestBody';
import { getComment } from './getComment';
import { getOperationErrors } from './getOperationErrors';
import { getOperationName } from './getOperationName';
@ -11,6 +12,7 @@ import { getOperationRequestBody } from './getOperationRequestBody';
import { getOperationResponseHeader } from './getOperationResponseHeader';
import { getOperationResponses } from './getOperationResponses';
import { getOperationResults } from './getOperationResults';
import { getRef } from './getRef';
import { getServiceClassName } from './getServiceClassName';
import { sortByRequired } from './sortByRequired';
@ -57,7 +59,8 @@ export function getOperation(openApi: OpenApi, url: string, method: string, op:
}
if (op.requestBody) {
const requestBody = getOperationRequestBody(openApi, op.requestBody);
const requestBodyDef = getRef<OpenApiRequestBody>(openApi, op.requestBody);
const requestBody = getOperationRequestBody(openApi, requestBodyDef);
operation.imports.push(...requestBody.imports);
operation.parameters.push(requestBody);
operation.parameters = operation.parameters.sort(sortByRequired);

View File

@ -14,46 +14,46 @@ export function getOperationParameters(openApi: OpenApi, parameters: OpenApiPara
parametersForm: [],
parametersCookie: [],
parametersHeader: [],
parametersBody: null,
parametersBody: null, // Not used in V3 -> @see requestBody
};
// Iterate over the parameters
parameters.forEach(parameterOrReference => {
const parameter = getRef<OpenApiParameter>(openApi, parameterOrReference);
const param = getOperationParameter(openApi, parameter);
const parameterDef = getRef<OpenApiParameter>(openApi, parameterOrReference);
const parameter = getOperationParameter(openApi, parameterDef);
// We ignore the "api-version" param, since we do not want to add this
// as the first / default parameter for each of the service calls.
if (param.prop !== 'api-version') {
switch (parameter.in) {
if (parameter.prop !== 'api-version') {
switch (parameterDef.in) {
case 'path':
operationParameters.parametersPath.push(param);
operationParameters.parameters.push(param);
operationParameters.imports.push(...param.imports);
operationParameters.parametersPath.push(parameter);
operationParameters.parameters.push(parameter);
operationParameters.imports.push(...parameter.imports);
break;
case 'query':
operationParameters.parametersQuery.push(param);
operationParameters.parameters.push(param);
operationParameters.imports.push(...param.imports);
operationParameters.parametersQuery.push(parameter);
operationParameters.parameters.push(parameter);
operationParameters.imports.push(...parameter.imports);
break;
case 'formData':
operationParameters.parametersForm.push(param);
operationParameters.parameters.push(param);
operationParameters.imports.push(...param.imports);
operationParameters.parametersForm.push(parameter);
operationParameters.parameters.push(parameter);
operationParameters.imports.push(...parameter.imports);
break;
case 'cookie':
operationParameters.parametersCookie.push(param);
operationParameters.parameters.push(param);
operationParameters.imports.push(...param.imports);
operationParameters.parametersCookie.push(parameter);
operationParameters.parameters.push(parameter);
operationParameters.imports.push(...parameter.imports);
break;
case 'header':
operationParameters.parametersHeader.push(param);
operationParameters.parameters.push(param);
operationParameters.imports.push(...param.imports);
operationParameters.parametersHeader.push(parameter);
operationParameters.parameters.push(parameter);
operationParameters.imports.push(...parameter.imports);
break;
}
}

View File

@ -4937,6 +4937,7 @@ exports[`v3 should generate: ./test/result/v3/services/RequestBodyService.ts 1`]
/* tslint:disable */
/* eslint-disable */
import { ModelWithString } from '../models/ModelWithString';
import { catchGenericError } from '../core/ApiError';
import { request as __request } from '../core/request';
import { OpenAPI } from '../core/OpenAPI';
@ -4944,11 +4945,11 @@ import { OpenAPI } from '../core/OpenAPI';
export class RequestBodyService {
/**
* @param requestBody
* @param requestBody A reusable request body
* @throws ApiError
*/
public static async postRequestBodyService(
requestBody?: any,
requestBody?: ModelWithString,
): Promise<void> {
const result = await __request({