97 lines
2.1 KiB
JavaScript
Raw Normal View History

2021-09-02 11:25:24 +02:00
'use strict';
2022-03-17 16:54:37 +01:00
const pascalCase = require('./pascal-case');
2021-09-02 11:25:24 +02:00
/**
* @description - Builds the Swagger response object for a given api
*
* @param {object} attributes - The attributes found on a contentType
* @param {object} route - The current route
* @param {boolean} isListOfEntities - Checks for a list of entitities
*
* @returns The Swagger responses
*/
2022-04-05 10:57:35 +02:00
const getApiResponse = (name, route, isListOfEntities = false) => {
const getSchema = () => {
if (route.method === 'DELETE') {
return {
type: 'integer',
format: 'int64',
};
}
if (isListOfEntities) {
return { $ref: `#/components/schemas/${pascalCase(name)}ListResponse` };
}
return { $ref: `#/components/schemas/${pascalCase(name)}Response` };
};
const schema = getSchema();
2021-09-02 11:25:24 +02:00
return {
responses: {
'200': {
description: 'OK',
2021-09-02 11:25:24 +02:00
content: {
'application/json': {
schema,
},
},
},
'400': {
description: 'Bad Request',
content: {
'application/json': {
2022-03-17 16:54:37 +01:00
schema: {
$ref: '#/components/schemas/Error',
},
},
},
},
'401': {
description: 'Unauthorized',
content: {
'application/json': {
2022-03-17 16:54:37 +01:00
schema: {
$ref: '#/components/schemas/Error',
},
},
},
},
2021-09-02 11:25:24 +02:00
'403': {
description: 'Forbidden',
content: {
'application/json': {
2022-03-17 16:54:37 +01:00
schema: {
$ref: '#/components/schemas/Error',
},
2021-09-02 11:25:24 +02:00
},
},
},
'404': {
description: 'Not Found',
content: {
'application/json': {
2022-03-17 16:54:37 +01:00
schema: {
$ref: '#/components/schemas/Error',
},
},
},
},
'500': {
description: 'Internal Server Error',
2021-09-02 11:25:24 +02:00
content: {
'application/json': {
2022-03-17 16:54:37 +01:00
schema: {
$ref: '#/components/schemas/Error',
},
2021-09-02 11:25:24 +02:00
},
},
},
},
};
};
2022-04-05 10:57:35 +02:00
module.exports = getApiResponse;