# Documentación

# Swagger


Swagger es una serie de reglas, especificaciones y herramientas que nos ayudan a documentar nuestras APIs.

# Instalación

sudo npm i @hapi/inert@5.2.2 @hapi/vision@5.5.4
sudo npm i hapi-swagger@10.2.0

# Configuracion

const Pack = require('./package')
const Vision = require('@hapi/vision')
const Inert = require('@hapi/inert')
const HapiSwagger = require('hapi-swagger')

// Dentro de la funcion que inicia el server:
const swaggerOptions = {
        info: {
            title: 'API Documentation',
            version: Pack.version
        }
    }
    await server.register([
        Inert,
        Vision,
        {
            plugin: HapiSwagger,
            options: swaggerOptions
        }
    ])

# Uso

{
    method: "POST",
    path: "/v1/courses",
    handler: handlers.createCourses,
    options: {
      cors: true,
      tags: ["api"],  // bandera para swagger
      description: "Add a course", 
      validate: {
        payload: courseSchema.create,
        failAction: (req, h, err) => {
          throw err.details[0].message
        }
      },
      response: {
        failAction: (req, h, err) => {
            return Boom.badRequest(err.details[0].message)
        },
        status: {
          201: Joi.object({
                    uuid: Joi.string().uuid({ version: 'uuidv4' }),
                    message: Joi.string()
                }),
          400: Joi.object({
                    statusCode: Joi.number(),
                    error: Joi.string(),
                    message: Joi.string()
                }),
          500: Joi.object({
                    statusCode: Joi.number(),
                    error: Joi.string(),
                    message: Joi.string()
                })
        }
      }
    }
  }

Nota

Swagger utiliza los campos description y response para mostrarlas en la documentacion, de todo aquel endpoint con el tag 'api'.