How to use reference to joi schema with query parameters in swagger-autogen

186 Views Asked by At

I am using swagger-autogen to generate API documentation from Joi validations in my Express.js. I have this validation

const createCategoryBodySchema = Joi.object().keys({
  parentId: Joi.number().positive().max(DB_INTEGER_MAX_VALUE).integer(),
  name: Joi.string().regex(checkAlphanumericLineSpaceCommaDot).message(COMMON_ERROR_MESSAGES.nameValidation).required()
})

const { swagger: createCategoryBodySwagger } = j2s(createCategoryBodySchema);

I also added it to @definitions in swaggerAutogen docs

And I used this fake route to generate doc for this endpoint

/*
  #swagger.start
  #swagger.tags = ['Categories']
  #swagger.path = '/api/v1/categories/'
  #swagger.method = 'get'
  #swagger.summary = 'Get Categories'

  #swagger.responses[200]
  #swagger.responses[404]
  #swagger.end
*/

Now to avoid writing query parameters I need to reference createCategoryBodySwagger in this fake endpoint. Can anyone help me to reference correctly?

From swagger-autogen documantation example

app.post('/path', (req, res) => {
    ...
    /*  #swagger.parameters['body'] = {
            in: 'body',
            description: 'Add a user',
            schema: { $ref: '#/definitions/someDefinition' }
    } */
    ...
});

I have changed body to query, which didn't work

/*
  #swagger.start
  #swagger.tags = ['Categories']
  #swagger.path = '/api/v1/categories/'
  #swagger.method = 'get'
  #swagger.summary = 'Get Categories'
  #swagger.parameters['query'] = {
    in: 'query',
    description: 'Add a user',
    schema: {
      $ref: '#/definitions/updateCategoryBodySwagger'
    }
  }

  #swagger.responses[200]
  #swagger.responses[404]
  #swagger.end
*/

referencing like this. I also checked this question in stackoverflow but it reference in requestBody not in query

1

There are 1 best solutions below

0
Armen Sanoyan On

I just had to remove line in: 'query', from

#swagger.parameters['query'] = {
in: 'query',
description: 'Add a user',
schema: {
  $ref: '#/definitions/updateCategoryBodySwagger'
}

}