diff --git a/package.json b/package.json index ff02dd3..4ef49f8 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,6 @@ "start": "node src/server.js", "test": "NODE_ENV=test gulp test", "dev": "nodemon -w server --exec babel-node -- server/server.js", - "localtest": "NODE_ENV=test gulp test", "migrate": "sequelize db:migrate && npm run seed", "mocha": "NODE_ENV=test nyc --reporter=lcov --reporter=text --reporter=html mocha --timeout 90000 --compilers js:babel-register -- ./tests/**/*.spec.js", "seed": "sequelize db:seed:all", diff --git a/server/controllers/documents.js b/server/controllers/documents.js index c97bd78..cfd5792 100644 --- a/server/controllers/documents.js +++ b/server/controllers/documents.js @@ -31,15 +31,6 @@ export default { }); }, getAll(req, res) { - if (req.query.limit || req.query.offset) { - if (!Number.isInteger(Number(req.query.limit)) - || !Number.isInteger(Number(req.query.offset))) { - return res.status(400).send({ - message: 'Limit and Offset params must be numbers' - }); - } - } - Document.findAll() .then((response) => { const totalCount = response.length; diff --git a/server/controllers/users.js b/server/controllers/users.js index 9abc3c9..08350d9 100644 --- a/server/controllers/users.js +++ b/server/controllers/users.js @@ -61,15 +61,6 @@ export default { }); }, getAll(req, res) { - if (req.query.limit || req.query.offset) { - if (!Number.isInteger(Number(req.query.limit)) - || !Number.isInteger(Number(req.query.offset))) { - return res.status(400).send({ - message: 'Limit and Offset params must be numbers' - }); - } - } - User.findAll() .then((response) => { const totalCount = response.length; diff --git a/server/middleware/middleware.js b/server/middleware/middleware.js index f258d63..183f1c8 100644 --- a/server/middleware/middleware.js +++ b/server/middleware/middleware.js @@ -146,6 +146,27 @@ export function validateDocument(req, res, next) { next(); } +/** + * @description validates limit and offset if they are provided + * @function + * @param {Object} req + * @param {Object} res + * @param {callback} next + * @returns {json} json error response + */ +export function validateLimitAndOffset(req, res, next) { + if (req.query.limit || req.query.offset) { + if (!Number.isInteger(Number(req.query.limit)) + || !Number.isInteger(Number(req.query.offset))) { + return res.status(400).send({ + message: 'Limit and Offset params must be numbers' + }); + } + } + + next(); +} + /** * @description validates login fields * @function diff --git a/server/routes/documents.js b/server/routes/documents.js deleted file mode 100644 index f457319..0000000 --- a/server/routes/documents.js +++ /dev/null @@ -1,15 +0,0 @@ -import documentController from '../controllers/documents'; -import { authenticate, findDocumentById, validateDocument, validateParam } from '../middleware/middleware'; - -const documentRoutes = (router) => { - router.route('/documents') - .get(authenticate, documentController.getAll) - .post(authenticate, validateDocument, documentController.create); - - router.route('/documents/:id') - .get(authenticate, validateParam, findDocumentById, documentController.getOne) - .put(authenticate, validateParam, findDocumentById, documentController.update) - .delete(authenticate, validateParam, findDocumentById, documentController.delete); -}; - -export default documentRoutes; diff --git a/server/routes/index.js b/server/routes/index.js index ad0e035..db0fb90 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -1,11 +1,5 @@ -import documentRoutes from './documents'; -import roleRoutes from './roles'; -import searchRoutes from './search'; -import userRoutes from './users'; +import routes from './routes'; export default (router) => { - documentRoutes(router); - roleRoutes(router); - searchRoutes(router); - userRoutes(router); + routes(router); }; diff --git a/server/routes/roles.js b/server/routes/roles.js deleted file mode 100644 index 7d29a55..0000000 --- a/server/routes/roles.js +++ /dev/null @@ -1,15 +0,0 @@ -import rolesController from '../controllers/roles'; -import { authenticate, findRoleById, isAdministrator, validateParam, validateRole } from '../middleware/middleware'; - -const roleRoutes = (router) => { - router.route('/roles') - .get(authenticate, isAdministrator, rolesController.getAll) - .post(authenticate, isAdministrator, validateRole, rolesController.create); - - router.route('/roles/:id') - .get(authenticate, isAdministrator, validateParam, findRoleById, rolesController.getOne) - .put(authenticate, isAdministrator, validateParam, findRoleById, rolesController.update) - .delete(authenticate, isAdministrator, validateParam, findRoleById, rolesController.delete); -}; - -export default roleRoutes; diff --git a/server/routes/routes.js b/server/routes/routes.js new file mode 100644 index 0000000..b83016b --- /dev/null +++ b/server/routes/routes.js @@ -0,0 +1,68 @@ +import documentController from '../controllers/documents'; +import rolesController from '../controllers/roles'; +import searchController from '../controllers/search'; +import usersController from '../controllers/users'; +import { + authenticate, + findDocumentById, + findRoleById, + findUserById, + isAdministrator, + validateDocument, + validateLimitAndOffset, + validateLogin, + validateParam, + validateQuery, + validateRole, + validateUser +} from '../middleware/middleware'; + +const routes = (router) => { + // Document routes + router.route('/documents') + .get(authenticate, validateLimitAndOffset, documentController.getAll) + .post(authenticate, validateDocument, documentController.create); + + router.route('/documents/:id') + .get(authenticate, validateParam, findDocumentById, documentController.getOne) + .put(authenticate, validateParam, findDocumentById, documentController.update) + .delete(authenticate, validateParam, findDocumentById, documentController.delete); + + // Role routes + router.route('/roles') + .get(authenticate, isAdministrator, rolesController.getAll) + .post(authenticate, isAdministrator, validateRole, rolesController.create); + + router.route('/roles/:id') + .get(authenticate, isAdministrator, validateParam, findRoleById, rolesController.getOne) + .put(authenticate, isAdministrator, validateParam, findRoleById, rolesController.update) + .delete(authenticate, isAdministrator, validateParam, findRoleById, rolesController.delete); + + // Search route + router.route('/search/users') + .get(validateQuery, searchController.searchUser); + + router.route('/search/documents') + .get(validateQuery, searchController.searchDocument); + + // User routes + router.route('/users/login') + .post(validateLogin, usersController.login); + + router.route('/users/logout') + .post(usersController.logout); + + router.route('/users') + .get(authenticate, isAdministrator, validateLimitAndOffset, usersController.getAll) + .post(validateUser, usersController.signup); + + router.route('/users/:id') + .get(authenticate, validateParam, findUserById, usersController.getOne) + .put(authenticate, validateParam, findUserById, usersController.update) + .delete(authenticate, validateParam, findUserById, usersController.delete); + + router.route('/users/:id/documents') + .get(authenticate, validateParam, findUserById, usersController.getUserDocuments); +}; + +export default routes; diff --git a/server/routes/search.js b/server/routes/search.js deleted file mode 100644 index 9c828df..0000000 --- a/server/routes/search.js +++ /dev/null @@ -1,12 +0,0 @@ -import searchController from '../controllers/search'; -import { validateQuery } from '../middleware/middleware'; - -const searchRoutes = (router) => { - router.route('/search/users') - .get(validateQuery, searchController.searchUser); - - router.route('/search/documents') - .get(validateQuery, searchController.searchDocument); -}; - -export default searchRoutes; diff --git a/server/routes/users.js b/server/routes/users.js deleted file mode 100644 index ad04164..0000000 --- a/server/routes/users.js +++ /dev/null @@ -1,31 +0,0 @@ -import usersController from '../controllers/users'; -import { - authenticate, - findUserById, - isAdministrator, - validateLogin, - validateParam, - validateUser -} from '../middleware/middleware'; - -const userRoutes = (router) => { - router.route('/users/login') - .post(validateLogin, usersController.login); - - router.route('/users/logout') - .post(usersController.logout); - - router.route('/users') - .post(validateUser, usersController.signup) - .get(authenticate, isAdministrator, usersController.getAll); - - router.route('/users/:id') - .get(authenticate, validateParam, findUserById, usersController.getOne) - .put(authenticate, validateParam, findUserById, usersController.update) - .delete(authenticate, validateParam, findUserById, usersController.delete); - - router.route('/users/:id/documents') - .get(validateParam, findUserById, usersController.getUserDocuments); -}; - -export default userRoutes;