Skip to content

Commit 6b7c2fa

Browse files
committed
refactor(migrations): 更正 swagger 2.0 的兼容性
- 区分 body 和 form-data 类型的请求体 - 添加对 body 请求体的特殊处理逻辑 - 更新单元测试以反映新的请求体处理方式
1 parent c56e2fe commit 6b7c2fa

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

src/migrations/openapi-2_0.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,24 @@ function migGeneralParameter(parameter: OpenAPIV2.GeneralParameterObject | OpenA
148148
};
149149
}
150150

151-
function makeRequestBody(bodySchema: BodySchema[], medias: string[]): OpenAPIV3.RequestBodyObject {
151+
function makeRequestBody(bodySchemas: BodySchema[], medias: string[]): OpenAPIV3.RequestBodyObject {
152152
let requestBodySchema: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject | undefined;
153+
const bodyRequest = bodySchemas.find(({ parameter }) => parameter.in === 'body');
154+
const requestBodyRest = {};
153155

154-
if (bodySchema.length > 0) {
156+
// @ref https://swagger.io/docs/specification/v2_0/describing-request-body/
157+
// requestBodySchema.name 忽略,其本身作为 body
158+
if (bodyRequest) {
159+
requestBodySchema = bodyRequest.schema;
160+
const { required, description } = bodyRequest.parameter;
161+
Object.assign(requestBodyRest, { required, description });
162+
}
163+
// @ref https://swagger.io/docs/specification/v2_0/file-upload/
164+
// 其余内容为 form-data
165+
else if (bodySchemas.length > 0) {
155166
requestBodySchema = {
156167
type: 'object',
157-
properties: bodySchema.reduce(
168+
properties: bodySchemas.reduce(
158169
(properties, { parameter, schema }) => {
159170
const { required, default: default_, description } = parameter;
160171
properties[parameter.name] = {
@@ -171,6 +182,7 @@ function makeRequestBody(bodySchema: BodySchema[], medias: string[]): OpenAPIV3.
171182
}
172183

173184
return {
185+
...requestBodyRest,
174186
content: requestBodySchema
175187
? medias.reduce(
176188
(content, media) => {

test/migrations/openapi_2_0.test.ts

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -194,18 +194,13 @@ it('post parameter in=body', () => {
194194
'/test': {
195195
post: {
196196
requestBody: {
197+
required: false,
198+
description: 'botId',
197199
content: {
198200
'*': {
199201
schema: {
200-
type: 'object',
201-
properties: {
202-
botId: {
203-
required: false,
204-
description: 'botId',
205-
type: 'integer',
206-
format: 'int64',
207-
},
208-
},
202+
type: 'integer',
203+
format: 'int64',
209204
},
210205
},
211206
},

0 commit comments

Comments
 (0)