diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NodeJSExpressServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NodeJSExpressServerCodegen.java index 9dec11b8aa07..1ae10d803e7a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NodeJSExpressServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/NodeJSExpressServerCodegen.java @@ -49,7 +49,7 @@ public class NodeJSExpressServerCodegen extends DefaultCodegen implements Codege protected String apiVersion = "1.0.0"; protected String defaultServerPort = "8080"; - protected String implFolder = "service"; + protected String implFolder = "services"; protected String projectName = "openapi-server"; protected String exportedName; @@ -91,17 +91,16 @@ public NodeJSExpressServerCodegen() { // utils folder supportingFiles.add(new SupportingFile("utils" + File.separator + "openapiRouter.mustache", "utils", "openapiRouter.js")); - supportingFiles.add(new SupportingFile("utils" + File.separator + "swaggerRouter.mustache", "utils", "swaggerRouter.js")); supportingFiles.add(new SupportingFile("utils" + File.separator + "writer.mustache", "utils", "writer.js")); // controllers folder - supportingFiles.add(new SupportingFile("service" + File.separator + "test.mustache", "controllers", "TestController.js")); + supportingFiles.add(new SupportingFile("controllers" + File.separator + "test.mustache", "controllers", "TestController.js")); supportingFiles.add(new SupportingFile("controllers" + File.separator + "index.mustache", "controllers", "index.js")); supportingFiles.add(new SupportingFile("controllers" + File.separator + "Controller.mustache", "controllers", "Controller.js")); // service folder - supportingFiles.add(new SupportingFile("service" + File.separator + "test.mustache", "service", "TestService.js")); - supportingFiles.add(new SupportingFile("service" + File.separator + "index.mustache", "service", "index.js")); - supportingFiles.add(new SupportingFile("service" + File.separator + "Service.mustache", "service", "Service.js")); + supportingFiles.add(new SupportingFile("services" + File.separator + "test.mustache", "services", "TestService.js")); + supportingFiles.add(new SupportingFile("services" + File.separator + "index.mustache", "services", "index.js")); + supportingFiles.add(new SupportingFile("services" + File.separator + "Service.mustache", "services", "Service.js")); // do not overwrite if the file is already present writeOptional(outputFolder, new SupportingFile("package.mustache", "", "package.json")); diff --git a/modules/openapi-generator/src/main/resources/nodejs-express-server/controller.mustache b/modules/openapi-generator/src/main/resources/nodejs-express-server/controller.mustache index 60a475663d0e..61d7290a3ed7 100644 --- a/modules/openapi-generator/src/main/resources/nodejs-express-server/controller.mustache +++ b/modules/openapi-generator/src/main/resources/nodejs-express-server/controller.mustache @@ -3,6 +3,7 @@ const Controller = require('./Controller'); class {{{classname}}}Controller { constructor(Service) { this.service = Service; + } {{#operations}} {{#operation}} @@ -13,5 +14,5 @@ class {{{classname}}}Controller { {{/operation}} } -module.exports = {{classname}}; +module.exports = {{classname}}Controller; {{/operations}} diff --git a/modules/openapi-generator/src/main/resources/nodejs-express-server/controllers/Controller.mustache b/modules/openapi-generator/src/main/resources/nodejs-express-server/controllers/Controller.mustache index 3170c1692d31..bdf8776c0e43 100644 --- a/modules/openapi-generator/src/main/resources/nodejs-express-server/controllers/Controller.mustache +++ b/modules/openapi-generator/src/main/resources/nodejs-express-server/controllers/Controller.mustache @@ -1,3 +1,5 @@ +const logger = require('../logger'); + class Controller { static sendResponse(response, payload) { /** @@ -23,7 +25,26 @@ class Controller { } } + static collectFiles(request) { + logger.info('Checking if files are expected in schema'); + if (request.openapi.schema.requestBody !== undefined) { + const [contentType] = request.headers['content-type'].split(';'); + if (contentType === 'multipart/form-data') { + const contentSchema = request.openapi.schema.requestBody.content[contentType].schema; + Object.entries(contentSchema.properties).forEach(([name, property]) => { + if (property.type === 'string' && ['binary', 'base64'].indexOf(property.format) > -1) { + request.body[name] = request.files.find(file => file.fieldname === name); + } + }); + } else if (request.openapi.schema.requestBody.content[contentType] !== undefined + && request.files !== undefined) { + [request.body] = request.files; + } + } + } + static collectRequestParams(request) { + this.collectFiles(request); const requestParams = {}; if (request.openapi.schema.requestBody !== undefined) { requestParams.body = request.body; @@ -41,13 +62,6 @@ class Controller { static async handleRequest(request, response, serviceOperation) { try { const serviceResponse = await serviceOperation(this.collectRequestParams(request)); - // let serviceResponse; - // this.collectRequestParams(request); - // if (request.openapi.schema.requestBody !== undefined) { - // serviceResponse = await serviceOperation(request.body); - // } else { - // serviceResponse = await serviceOperation(request.openapi.requestParams); - // } Controller.sendResponse(response, serviceResponse); } catch (error) { Controller.sendError(response, error); diff --git a/modules/openapi-generator/src/main/resources/nodejs-express-server/controllers/test.mustache b/modules/openapi-generator/src/main/resources/nodejs-express-server/controllers/test.mustache index 70bb9aa03fb1..516c135b45be 100644 --- a/modules/openapi-generator/src/main/resources/nodejs-express-server/controllers/test.mustache +++ b/modules/openapi-generator/src/main/resources/nodejs-express-server/controllers/test.mustache @@ -1,9 +1,22 @@ -const Controller = require('./Controller'); +const Service = require('../services/Service'); -class TestController { - constructor(Service) { - this.service = Service; - } +const testItems = require('../tests/testFiles/testItems.json'); + +class TestService { + static testGetController() { + return new Promise( + async (resolve, reject) => { + try { + resolve(Service.successResponse( + testItems, + 200, + )); + } catch (e) { + const message = e.getMessage() || 'Could not get items. Server error'; + reject(Service.rejectResponse(message, 500)); + } + }, + ); sendResponse(request, response) { response.status(200); @@ -56,4 +69,4 @@ class TestController { } } -module.exports = Test; +module.exports = TestController; diff --git a/modules/openapi-generator/src/main/resources/nodejs-express-server/expressServer.mustache b/modules/openapi-generator/src/main/resources/nodejs-express-server/expressServer.mustache index 5a64ee33a6c8..df8a252cb122 100644 --- a/modules/openapi-generator/src/main/resources/nodejs-express-server/expressServer.mustache +++ b/modules/openapi-generator/src/main/resources/nodejs-express-server/expressServer.mustache @@ -6,26 +6,60 @@ const cors = require('cors'); const cookieParser = require('cookie-parser'); const bodyParser = require('body-parser'); const { OpenApiValidator } = require('express-openapi-validator'); -const swaggerRouter = require('./utils/swaggerRouter'); - +// const pathToRegexp = require('path-to-regexp'); +const openapiRouter = require('./utils/openapiRouter'); +const logger = require('./logger'); class ExpressServer { constructor(port, openApiYaml) { this.port = port; this.app = express(); - this.schema = openApiYaml; + this.openApiPath = openApiYaml; + this.schema = yamljs.load(openApiYaml); // this.middleware = new Middleware(this.app); this.setupMiddleware(); } + // handleIncomingMedia(request) { + // console.log(this.apiValidator); + // const incomingMedia = request.headers['content-type'].split(';')[0]; + // logger.info(`checking access for media type ${incomingMedia}`); + // const currentServer = this.schema.servers.find( + // server => server.url.indexOf(request.headers.host) > -1, + // ); + // const currentServerUrl = currentServer.url.substr(currentServer.url.indexOf('://') + 3); + // // const path = `${request.headers.host}${request.originalUrl}`; + // const requestPath = `${request.headers.host}${request.originalUrl}`.substr(currentServerUrl.length); + // this.allowedMedia.forEach((permissions, path) => { + // console.log(path, permissions); + // const keys = []; + // const regex = pathToRegexp(path, keys); + // const matches = regex.exec(requestPath); + // console.log(matches); + // }); + // // this.allowedMedia.find((instance) => { + // // const keys = []; + // // const regex = pathToRegexp(Object.keys(instance)[0], keys); + // // return instance.path === regex; + // // }); + // + // logger.info(`analysing incoming media. content type: ${request.headers['content-type']}`); ''; + // logger.info(this.schema.paths[request.url]); + // logger.info(this.schema); + // } + setupMiddleware() { + // this.setupAllowedMedia(); this.app.use(cors()); this.app.use(bodyParser.json()); this.app.use(express.json()); this.app.use(express.urlencoded({ extended: false })); this.app.use(cookieParser()); - this.app.get('/spec', express.static(this.schema)); - this.app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(yamljs.load(this.schema))); + // this.app.use(bodyParser.raw({ + // type: (req => this.handleIncomingMedia(req)), + // })); + this.app.get('/spec', express.static(this.openApiPath)); + this.app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(this.schema)); this.app.get('/login-redirect', (req, res) => { res.status(200); res.json(req.query); @@ -35,21 +69,9 @@ class ExpressServer { res.json(req.query); }); new OpenApiValidator({ - apiSpecPath: this.schema, + apiSpecPath: this.openApiPath, }).install(this.app); - this.app.use(swaggerRouter()); - // this.middleware.init(this.schema, (err) => { - // if (err) { - // console.error(err); - // } - // }); - // this.app.use( - // // this.middleware.metadata(), - // // this.middleware.CORS(), - // // this.middleware.parseRequest(), - // // this.middleware.validateRequest(), - // // ('/api-docs', swaggerUI.serve, swaggerUI.setup(this.swaggerJson)), - // ); + this.app.use(openapiRouter()); this.app.get('/', (req, res) => { res.status(200); res.end('Hello World'); @@ -96,5 +118,25 @@ class ExpressServer { console.log(`Server on port ${this.port} shut down`); } } + + setupAllowedMedia() { + this.allowedMedia = new Map(); + logger.info('Setting up allowed media types according to schema deifnition'); + Object.entries(this.schema.paths).forEach(([pathName, pathOperation]) => { + const pathMedia = {}; + ['post', 'put', 'patch'].forEach((method) => { + if (pathOperation[method] !== undefined + && pathOperation[method].requestBody !== undefined) { + pathMedia[method] = []; + Object.keys(pathOperation[method].requestBody.content).forEach((mediaType) => { + pathMedia[method].push(mediaType); + }); + } + }); + if (Object.keys(pathMedia).length > 0) { + this.allowedMedia.set(pathName, pathMedia); + } + }); + } } module.exports = ExpressServer; diff --git a/modules/openapi-generator/src/main/resources/nodejs-express-server/service.mustache b/modules/openapi-generator/src/main/resources/nodejs-express-server/service.mustache index 07667d84d5ec..b5f39b4577f2 100644 --- a/modules/openapi-generator/src/main/resources/nodejs-express-server/service.mustache +++ b/modules/openapi-generator/src/main/resources/nodejs-express-server/service.mustache @@ -23,7 +23,7 @@ class {{{classname}}}Service { * returns {{{returnType}}} {{/returnType}} **/ - static.{{{operationId}}}({ {{#allParams}}{{paramName}}{{#hasMore}},{{/hasMore}}{{/allParams}} }) { + static {{{operationId}}}({{#allParams}}{{#-first}}{ {{/-first}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{#-last}} }{{/-last}}{{/allParams}}) { return new Promise( async (resolve) => { try { diff --git a/modules/openapi-generator/src/main/resources/nodejs-express-server/service/Service.mustache b/modules/openapi-generator/src/main/resources/nodejs-express-server/services/Service.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/nodejs-express-server/service/Service.mustache rename to modules/openapi-generator/src/main/resources/nodejs-express-server/services/Service.mustache diff --git a/modules/openapi-generator/src/main/resources/nodejs-express-server/service/index.mustache b/modules/openapi-generator/src/main/resources/nodejs-express-server/services/index.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/nodejs-express-server/service/index.mustache rename to modules/openapi-generator/src/main/resources/nodejs-express-server/services/index.mustache diff --git a/modules/openapi-generator/src/main/resources/nodejs-express-server/service/test.mustache b/modules/openapi-generator/src/main/resources/nodejs-express-server/services/test.mustache similarity index 100% rename from modules/openapi-generator/src/main/resources/nodejs-express-server/service/test.mustache rename to modules/openapi-generator/src/main/resources/nodejs-express-server/services/test.mustache diff --git a/modules/openapi-generator/src/main/resources/nodejs-express-server/utils/openapiRouter.mustache b/modules/openapi-generator/src/main/resources/nodejs-express-server/utils/openapiRouter.mustache index ae4fd17383f0..1a77fec7b617 100644 --- a/modules/openapi-generator/src/main/resources/nodejs-express-server/utils/openapiRouter.mustache +++ b/modules/openapi-generator/src/main/resources/nodejs-express-server/utils/openapiRouter.mustache @@ -1,11 +1,67 @@ -class OpenapiRouter { - constructor(openApiDoc) { - this.apiDoc = openApiDoc; - } +const logger = require('../logger'); +const controllers = require('../controllers'); +const Services = require('../services'); - loadSchemas() { - console.log(this.apiDoc); - } +function handleError(err, request, response, next) { + logger.error(err); + const code = err.code || 400; + response.status(code); + response.error = err; + next(JSON.stringify({ + code, + error: err, + })); } -module.exports = OpenapiRouter; +/** + * The purpose of this route is to collect the request variables as defined in the + * OpenAPI document and pass them to the handling controller as another Express + * middleware. All parameters are collected in the requet.swagger.values key-value object + * + * The assumption is that security handlers have already verified and allowed access + * to this path. If the business-logic of a particular path is dependant on authentication + * parameters (e.g. scope checking) - it is recommended to define the authentication header + * as one of the parameters expected in the OpenAPI/Swagger document. + * + * Requests made to paths that are not in the OpernAPI scope + * are passed on to the next middleware handler. + * @returns {Function} + */ +function openApiRouter() { + return async (request, response, next) => { + try { + /** + * This middleware runs after a previous process have applied an openapi object + * to the request. + * If none was applied This is because the path requested is not in the schema. + * If there's no openapi object, we have nothing to do, and pass on to next middleware. + */ + if (request.openapi === undefined + || request.openapi.schema === undefined + ) { + next(); + return; + } + // request.swagger.paramValues = {}; + // request.swagger.params.forEach((param) => { + // request.swagger.paramValues[param.name] = getValueFromRequest(request, param); + // }); + const controllerName = request.openapi.schema['x-openapi-router-controller']; + const serviceName = request.openapi.schema['x-openapi-router-service']; + if (!controllers[controllerName] || controllers[controllerName] === undefined) { + handleError(`request sent to controller '${controllerName}' which has not been defined`, + request, response, next); + } else { + const apiController = new controllers[controllerName](Services[serviceName]); + const controllerOperation = request.openapi.schema.operationId; + await apiController[controllerOperation](request, response, next); + } + } catch (error) { + console.error(error); + const err = { code: 500, error: error.message }; + handleError(err, request, response, next); + } + }; +} + +module.exports = openApiRouter; diff --git a/modules/openapi-generator/src/main/resources/nodejs-express-server/utils/swaggerRouter.mustache b/modules/openapi-generator/src/main/resources/nodejs-express-server/utils/swaggerRouter.mustache deleted file mode 100644 index 530bbb7d3a6b..000000000000 --- a/modules/openapi-generator/src/main/resources/nodejs-express-server/utils/swaggerRouter.mustache +++ /dev/null @@ -1,65 +0,0 @@ -const logger = require('../logger'); -const controllers = require('../controllers'); -const Services = require('../service'); - -function handleError(err, request, response, next) { - logger.error(err); - const code = err.code || 400; - response.status(code); - response.error = err; - next(JSON.stringify({ - code, - error: err, - })); -} - -/** - * The purpose of this route is to collect the request variables as defined in the - * Swagger/OpenAPI document and pass them to the handling controller as another Express - * middleware. All parameters are collected in the requet.swagger.values key-value object - * - * The assumption is that security handlers have already verified and allowed access - * to this path. If the business-logic of a particular path is dependant on authentication - * parameters (e.g. scope checking) - it is recommended to define the authentication header - * as one of the parameters expected in the OpenAPI/Swagger document. - * - * Requests made to paths that are not in the OpernAPI/Swagger scope - * are passed on to the next middleware handler. - * @returns {Function} - */ -function swaggerRouter() { - return async (request, response, next) => { - try { - /** - * Previous process should have applied an openapi object to the request. If none was applied - * This is because the path requested is not in the schema. Nothing to do here. - */ - if (request.openapi === undefined - || request.openapi.schema === undefined - ) { - next(); - return; - } - // request.swagger.paramValues = {}; - // request.swagger.params.forEach((param) => { - // request.swagger.paramValues[param.name] = getValueFromRequest(request, param); - // }); - const controllerName = request.openapi.schema['x-openapi-router-controller']; - const serviceName = `${controllerName}Service`; - if (!controllers[controllerName] || controllers[controllerName] === undefined) { - handleError(`request sent to controller '${controllerName}' which has not been defined`, - request, response, next); - } else { - const apiController = new controllers[controllerName](Services[serviceName]); - const controllerOperation = request.openapi.schema.operationId; - await apiController[controllerOperation](request, response, next); - } - } catch (error) { - console.error(error); - const err = { code: 500, error: error.message }; - handleError(err, request, response, next); - } - }; -} - -module.exports = swaggerRouter; diff --git a/samples/server/petstore/nodejs-express-server/controllers/PetController.js b/samples/server/petstore/nodejs-express-server/controllers/PetController.js index a07912475720..488389927cb7 100644 --- a/samples/server/petstore/nodejs-express-server/controllers/PetController.js +++ b/samples/server/petstore/nodejs-express-server/controllers/PetController.js @@ -3,6 +3,7 @@ const Controller = require('./Controller'); class PetController { constructor(Service) { this.service = Service; + } async addPet(request, response) { await Controller.handleRequest(request, response, this.service.addPet); diff --git a/samples/server/petstore/nodejs-express-server/controllers/StoreController.js b/samples/server/petstore/nodejs-express-server/controllers/StoreController.js index 683c262a9db7..fabc3e523f84 100644 --- a/samples/server/petstore/nodejs-express-server/controllers/StoreController.js +++ b/samples/server/petstore/nodejs-express-server/controllers/StoreController.js @@ -20,6 +20,7 @@ class StoreController { async placeOrder(request, response) { await Controller.handleRequest(request, response, this.service.placeOrder); } + } module.exports = StoreController; diff --git a/samples/server/petstore/nodejs-express-server/controllers/TestController.js b/samples/server/petstore/nodejs-express-server/controllers/TestController.js index b4fb7c296e9a..516c135b45be 100644 --- a/samples/server/petstore/nodejs-express-server/controllers/TestController.js +++ b/samples/server/petstore/nodejs-express-server/controllers/TestController.js @@ -17,97 +17,56 @@ class TestService { } }, ); + + sendResponse(request, response) { + response.status(200); + const objectToReturn = {}; + Object.keys(request.swagger.paramValues).forEach((key) => { + const val = request.swagger.paramValues[key]; + if (val instanceof Object) { + objectToReturn[key] = val.originalname || val.name || val; + } else { + objectToReturn[key] = request.swagger.paramValues[key]; + } + }); + response.json(objectToReturn); } - static testDeleteController({ itemId }) { - return new Promise( - async (resolve, reject) => { - try { - let responseMessage = ''; - const itemToDeleteIndex = testItems.findIndex(item => item.id === itemId); - if (itemToDeleteIndex > -1) { - testItems.splice(itemToDeleteIndex, 1); - responseMessage = `test item id ${itemId} deleted successfully`; - } else { - responseMessage = 'test item not found, nothing changed'; - } - resolve(Service.successResponse(responseMessage, 200)); - } catch (err) { - const message = err.getMessage() || 'Invalid test item value'; - const code = err.status || 400; - reject(Service.rejectResponse(message, code)); - } - }, - ); + confirmRouteGetSingle(request, response) { + this.sendResponse(request, response); } - static testPostController({ testItem }) { - return new Promise( - async (resolve, reject) => { - try { - const highestId = testItems[testItems.length - 1].id; - const newItem = { - id: highestId + 1, - name: testItem.name, - description: testItem.description, - version: testItem.version, - }; - testItems.push(newItem); - resolve(Service.successResponse(newItem)); - } catch (e) { - reject(Service.rejectResponse( - e.getMessage() || 'Invalid input', - e.status || 405, - )); - } - }, - ); + confirmRouteGetMany(request, response) { + this.sendResponse(request, response); } - static testFindByIdController({ itemId }) { - return new Promise( - async (resolve, reject) => { - try { - const itemFound = testItems.find(item => item.id === itemId); - if (itemFound !== undefined) { - resolve(Service.successResponse(itemFound, 200)); - } else { - reject(Service.rejectResponse('item not found', 404)); - } - } catch (e) { - reject(Service.rejectResponse(e.getMessage() || 'Invalid ID supplied', 400)); - } - }, - ); + confirmRoutePost(request, response) { + this.sendResponse(request, response); } - static testPutController({ itemId, testItem }) { - return new Promise( - async (resolve, reject) => { - try { - let responseBody; - const itemToUpdate = testItems.find(item => item.id === itemId); - if (itemToUpdate !== undefined) { - itemToUpdate.name = testItem.name || itemToUpdate.name; - itemToUpdate.description = testItem.description || itemToUpdate.description; - itemToUpdate.version = testItem.version || itemToUpdate.version; - responseBody = itemToUpdate; - } else { - responseBody = `could not find an item with id ${itemId} to update. Nothing changed`; - } - resolve(Service.successResponse( - responseBody, - 200, - )); - } catch (e) { - reject(Service.rejectResponse( - e.getMessage || 'Invalid input', - 405, - )); - } - }, - ); + confirmRoutePut(request, response) { + this.sendResponse(request, response); + } + + async testGetController(request, response) { + await Controller.handleRequest(request, response, this.service.testGetController); + } + + async testPostController(request, response) { + await Controller.handleRequest(request, response, this.service.testPostController); + } + + async testPutController(request, response) { + await Controller.handleRequest(request, response, this.service.testPutController); + } + + async testDeleteController(request, response) { + await Controller.handleRequest(request, response, this.service.testDeleteController); + } + + async testFindByIdController(request, response) { + await Controller.handleRequest(request, response, this.service.testFindByIdController); } } -module.exports = TestService; +module.exports = TestController; diff --git a/samples/server/petstore/nodejs-express-server/controllers/UserController.js b/samples/server/petstore/nodejs-express-server/controllers/UserController.js index 14daa925855e..4dafcfa89032 100644 --- a/samples/server/petstore/nodejs-express-server/controllers/UserController.js +++ b/samples/server/petstore/nodejs-express-server/controllers/UserController.js @@ -36,6 +36,7 @@ class UserController { async updateUser(request, response) { await Controller.handleRequest(request, response, this.service.updateUser); } + } module.exports = UserController; diff --git a/samples/server/petstore/nodejs-express-server/services/PetService.js b/samples/server/petstore/nodejs-express-server/services/PetService.js index f7f944e524d9..779b40fb99d7 100644 --- a/samples/server/petstore/nodejs-express-server/services/PetService.js +++ b/samples/server/petstore/nodejs-express-server/services/PetService.js @@ -2,12 +2,13 @@ const Service = require('./Service'); class PetService { + /** * Add a new pet to the store * * body Pet Pet object that needs to be added to the store * no response value expected for this operation - * */ + **/ static addPet({ body }) { return new Promise( async (resolve) => { @@ -29,7 +30,7 @@ class PetService { * petId Long Pet id to delete * apiUnderscorekey String (optional) * no response value expected for this operation - * */ + **/ static deletePet({ petId, apiUnderscorekey }) { return new Promise( async (resolve) => { @@ -51,7 +52,7 @@ class PetService { * * status List Status values that need to be considered for filter * returns List - * */ + **/ static findPetsByStatus({ status }) { return new Promise( async (resolve) => { @@ -73,7 +74,7 @@ class PetService { * * tags List Tags to filter by * returns List - * */ + **/ static findPetsByTags({ tags }) { return new Promise( async (resolve) => { @@ -95,7 +96,7 @@ class PetService { * * petId Long ID of pet to return * returns Pet - * */ + **/ static getPetById({ petId }) { return new Promise( async (resolve) => { @@ -116,7 +117,7 @@ class PetService { * * body Pet Pet object that needs to be added to the store * no response value expected for this operation - * */ + **/ static updatePet({ body }) { return new Promise( async (resolve) => { @@ -139,7 +140,7 @@ class PetService { * name String Updated name of the pet (optional) * status String Updated status of the pet (optional) * no response value expected for this operation - * */ + **/ static updatePetWithForm({ petId, name, status }) { return new Promise( async (resolve) => { @@ -162,7 +163,7 @@ class PetService { * additionalMetadata String Additional data to pass to server (optional) * file File file to upload (optional) * returns ApiResponse - * */ + **/ static uploadFile({ petId, additionalMetadata, file }) { return new Promise( async (resolve) => { @@ -177,6 +178,7 @@ class PetService { }, ); } + } module.exports = PetService; diff --git a/samples/server/petstore/nodejs-express-server/services/StoreService.js b/samples/server/petstore/nodejs-express-server/services/StoreService.js index 1b40e73a28dd..78b53c34ab08 100644 --- a/samples/server/petstore/nodejs-express-server/services/StoreService.js +++ b/samples/server/petstore/nodejs-express-server/services/StoreService.js @@ -2,14 +2,14 @@ const Service = require('./Service'); class StoreService { + /** * Delete purchase order by ID - * For valid response try integer IDs with value < 1000. - * Anything above 1000 or nonintegers will generate API errors + * For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors * * orderId String ID of the order that needs to be deleted * no response value expected for this operation - * */ + **/ static deleteOrder({ orderId }) { return new Promise( async (resolve) => { @@ -30,7 +30,7 @@ class StoreService { * Returns a map of status codes to quantities * * returns Map - * */ + **/ static getInventory() { return new Promise( async (resolve) => { @@ -48,12 +48,11 @@ class StoreService { /** * Find purchase order by ID - * For valid response try integer IDs with value <= 5 or > 10. - * Other values will generated exceptions + * For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions * * orderId Long ID of pet that needs to be fetched * returns Order - * */ + **/ static getOrderById({ orderId }) { return new Promise( async (resolve) => { @@ -74,7 +73,7 @@ class StoreService { * * body Order order placed for purchasing the pet * returns Order - * */ + **/ static placeOrder({ body }) { return new Promise( async (resolve) => { @@ -89,6 +88,7 @@ class StoreService { }, ); } + } module.exports = StoreService; diff --git a/samples/server/petstore/nodejs-express-server/services/UserService.js b/samples/server/petstore/nodejs-express-server/services/UserService.js index 1404c2a4a586..49028d6e9216 100644 --- a/samples/server/petstore/nodejs-express-server/services/UserService.js +++ b/samples/server/petstore/nodejs-express-server/services/UserService.js @@ -2,13 +2,14 @@ const Service = require('./Service'); class UserService { + /** * Create user * This can only be done by the logged in user. * * body User Created user object * no response value expected for this operation - * */ + **/ static createUser({ body }) { return new Promise( async (resolve) => { @@ -29,7 +30,7 @@ class UserService { * * body List List of user object * no response value expected for this operation - * */ + **/ static createUsersWithArrayInput({ body }) { return new Promise( async (resolve) => { @@ -50,7 +51,7 @@ class UserService { * * body List List of user object * no response value expected for this operation - * */ + **/ static createUsersWithListInput({ body }) { return new Promise( async (resolve) => { @@ -72,7 +73,7 @@ class UserService { * * username String The name that needs to be deleted * no response value expected for this operation - * */ + **/ static deleteUser({ username }) { return new Promise( async (resolve) => { @@ -93,7 +94,7 @@ class UserService { * * username String The name that needs to be fetched. Use user1 for testing. * returns User - * */ + **/ static getUserByName({ username }) { return new Promise( async (resolve) => { @@ -115,7 +116,7 @@ class UserService { * username String The user name for login * password String The password for login in clear text * returns String - * */ + **/ static loginUser({ username, password }) { return new Promise( async (resolve) => { @@ -135,7 +136,7 @@ class UserService { * Logs out current logged in user session * * no response value expected for this operation - * */ + **/ static logoutUser() { return new Promise( async (resolve) => { @@ -158,7 +159,7 @@ class UserService { * username String name that need to be deleted * body User Updated user object * no response value expected for this operation - * */ + **/ static updateUser({ username, body }) { return new Promise( async (resolve) => { @@ -173,6 +174,7 @@ class UserService { }, ); } + } module.exports = UserService;