diff --git a/configs/index.js b/configs/index.js index c6cb87a34..8416aa200 100644 --- a/configs/index.js +++ b/configs/index.js @@ -7,4 +7,50 @@ require("./mongodb")(); - require("./kafka")(); \ No newline at end of file + require("./kafka")(); + const path = require("path"); + const fs = require("fs"); + const requireAll = require("require-all"); + + global.PROJECT_ROOT_DIRECTORY = path.join(__dirname, '..'); + + //load base v1 controllers + const pathToController = PROJECT_ROOT_DIRECTORY + "/controllers/v1/"; + + fs.readdirSync(pathToController).forEach(function (file) { + checkWhetherFolderExistsOrNot(pathToController, file); + }); + + /** +* Check whether folder exists or Not. +* @method +* @name checkWhetherFolderExistsOrNot +* @param {String} pathToFolder - path to folder. +* @param {String} file - File name. +*/ + + function checkWhetherFolderExistsOrNot(pathToFolder, file) { + + let folderExists = fs.lstatSync(pathToFolder + file).isDirectory(); + + if (folderExists) { + fs.readdirSync(pathToFolder + file).forEach(function (folderOrFile) { + checkWhetherFolderExistsOrNot(pathToFolder + file + "/", folderOrFile); + }) + + } else { + if (file.match(/\.js$/) !== null) { + require(pathToFolder + file); + } + } + + } + + + // All controllers + global.controllers = requireAll({ + dirname: PROJECT_ROOT_DIRECTORY + "/controllers", + resolve: function (Controller) { + return new Controller(); + } + }); \ No newline at end of file diff --git a/routes/index.js b/routes/index.js index f52ed2ac7..f12273922 100644 --- a/routes/index.js +++ b/routes/index.js @@ -38,52 +38,69 @@ module.exports = (app) => { return next(error); } - try { - let controller; - if (req.params.file) { - controller = require(`../controllers/${req.params.version}/${req.params.controller}/${req.params.file}`); - } else { - controller = require(`../controllers/${req.params.version}/${req.params.controller}`); - } - controllerResponse = new controller()[req.params.method] ? await new controller()[req.params.method](req) : next(); - } catch (error) { // If controller or service throws some random error - return next(error); - } - if (controllerResponse.isResponseAStream && controllerResponse.isResponseAStream == true) { - fs.exists(controllerResponse.fileNameWithPath, function (exists) { - - if (exists) { - - res.setHeader( - 'Content-disposition', - 'attachment; filename=' + controllerResponse.fileNameWithPath.split('/').pop() - ); - res.set('Content-Type', 'application/octet-stream'); - fs.createReadStream(controllerResponse.fileNameWithPath).pipe(res); - - } else {} - }); + if (!req.params.version) { + next(); + } else if (!controllers[req.params.version]) { + next(); + } else if (!controllers[req.params.version][req.params.controller]) { + next(); + } else if (!(controllers[req.params.version][req.params.controller][req.params.method] || + controllers[req.params.version][req.params.controller][req.params.file][req.params.method])) { + next(); + } else if (req.params.method.startsWith("_")) { + next(); } else { - if (controllerResponse.statusCode !== 200 && controllerResponse.statusCode !== 201 && controllerResponse.statusCode !== 202) { - /* If error obtained then global error handler gets executed */ - return next(controllerResponse); + try { + + if (req.params.file) { + controllerResponse = + await controllers[req.params.version][req.params.controller][req.params.file][req.params.method](req); + } else { + controllerResponse = + await controllers[req.params.version][req.params.controller][req.params.method](req); + } + + + } catch (error) { // If controller or service throws some random error + return next(error); + } + + if (controllerResponse.isResponseAStream && controllerResponse.isResponseAStream == true) { + fs.exists(controllerResponse.fileNameWithPath, function (exists) { + + if (exists) { + + res.setHeader( + 'Content-disposition', + 'attachment; filename=' + controllerResponse.fileNameWithPath.split('/').pop() + ); + res.set('Content-Type', 'application/octet-stream'); + fs.createReadStream(controllerResponse.fileNameWithPath).pipe(res); + + } else {} + }); + } else { + if (controllerResponse.statusCode !== 200 && controllerResponse.statusCode !== 201 && controllerResponse.statusCode !== 202) { + /* If error obtained then global error handler gets executed */ + return next(controllerResponse); + } + + res.status(controllerResponse.statusCode).json({ + responseCode: controllerResponse.responseCode, + message: controllerResponse.message, + result: controllerResponse.result + }); } - - res.status(controllerResponse.statusCode).json({ - responseCode: controllerResponse.responseCode, - message: controllerResponse.message, - result: controllerResponse.result - }); } } app.all("/user/:version/:controller/:method", validator, router); - app.all("/user/:version/:controller/:method/:id", validator, router); app.all("/user/:version/:controller/:file/:method", validator, router); - app.all("/user/:version/:controller/:file/:method/:id", router); + app.all("/user/:version/:controller/:method/:id", validator, router); + app.all("/user/:version/:controller/:file/:method/:id", validator, router); app.use((req, res, next) => { res.status(404).json({ @@ -91,7 +108,7 @@ module.exports = (app) => { message: 'Requested resource not found!', }); }); - + // Global error handling middleware, should be present in last in the stack of a middleware's app.use((error, req, res, next) => { const status = error.statusCode || 500;