Skip to content

Commit ba4f7a0

Browse files
committed
handle request bodies defined by serverless
1 parent 6d5b994 commit ba4f7a0

File tree

1 file changed

+45
-6
lines changed

1 file changed

+45
-6
lines changed

src/definitionGenerator.js

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -341,11 +341,31 @@ class DefinitionGenerator {
341341
if (Object.keys(documentation).includes('deprecated'))
342342
obj.deprecated = documentation.deprecated
343343

344-
if (documentation.requestBody)
345-
obj.requestBody = await this.createRequestBody(documentation)
344+
if (documentation.requestBody || this.currentEvent?.request?.schemas) {
345+
const requestModel = {}
346+
if (documentation.requestBody) {
347+
Object.assign(
348+
requestModel,
349+
{
350+
description: documentation.requestBody.description,
351+
models: documentation.requestModels
352+
}
353+
)
354+
} else {
355+
Object.assign(
356+
requestModel,
357+
{
358+
description: '',
359+
models: this.currentEvent?.request?.schemas
360+
}
361+
)
362+
}
363+
364+
obj.requestBody = await this.createRequestBody(requestModel)
346365
.catch(err => {
347366
throw err
348367
})
368+
}
349369

350370
if (documentation.methodResponses)
351371
obj.responses = await this.createResponses(documentation)
@@ -488,13 +508,13 @@ class DefinitionGenerator {
488508
return obj
489509
}
490510

491-
async createRequestBody(documentation) {
511+
async createRequestBody(requestBodyDetails) {
492512
const obj = {
493-
description: documentation.requestBody.description,
494-
required: documentation.requestBody.required || false,
513+
description: requestBodyDetails.description,
514+
required: false
495515
}
496516

497-
obj.content = await this.createMediaTypeObject(documentation.requestModels, 'requestBody')
517+
obj.content = await this.createMediaTypeObject(requestBodyDetails.models)
498518
.catch(err => {
499519
throw err
500520
})
@@ -548,6 +568,25 @@ class DefinitionGenerator {
548568
Object.assign(mediaTypeObj, { [contentKey]: obj })
549569
}
550570
}
571+
572+
if (Object.keys(mediaTypeObj).length === 0) {
573+
for (const contentKey of Object.keys(models)) {
574+
const obj = {}
575+
const schema = (models[contentKey]?.schema) ? models[contentKey].schema : models[contentKey]
576+
const name = (models[contentKey]?.name) ? models[contentKey].name : uuid()
577+
const schemaRef = await this.schemaHandler.createSchema(name, schema)
578+
.catch(err => {
579+
throw err
580+
})
581+
582+
obj.schema = {
583+
$ref: schemaRef
584+
}
585+
586+
Object.assign(mediaTypeObj, { [contentKey]: obj })
587+
}
588+
}
589+
551590
return mediaTypeObj
552591
}
553592

0 commit comments

Comments
 (0)