From a28dafd1460ffc6a22fb5c3982030501d2031245 Mon Sep 17 00:00:00 2001 From: Gaurav Date: Fri, 7 Sep 2018 08:51:06 +0530 Subject: [PATCH 1/8] --update: Using mongoose in-built object id validation. (#14) --- server.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index 3e7fd3c..6af2db5 100644 --- a/server.js +++ b/server.js @@ -3,11 +3,13 @@ require('./app/db/mongoose'); const express = require('express'); const bodyParser = require('body-parser'); const expressValidator = require('express-validator'); +const mongoose = require('mongoose'); const port = process.env.PORT; const routes = require('./app/routes'); const log4js = require('log4js'); +const isValidObjectId = value => mongoose.Types.ObjectId.isValid(value); const logger = log4js.getLogger(); logger.level = 'debug'; @@ -17,7 +19,7 @@ const app = express(); app.use(bodyParser.json()); app.use(expressValidator({ customValidators: { - isValidObjectId: value => /^[0-9a-fA-F]{24}$/.test(value), + isValidObjectId, }, })); app.use('/api', routes); From 75223f04522d16d47232a0f281a6c94f940461ad Mon Sep 17 00:00:00 2001 From: G Date: Mon, 10 Sep 2018 08:59:41 +0530 Subject: [PATCH 2/8] --refactor: Add link DB call refactored in services file. --- app/controllers/links/addLink.js | 12 ++++++------ app/controllers/links/services.js | 15 +++++++++++++++ app/helpers/errorHandlers.js | 6 ++++++ 3 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 app/controllers/links/services.js create mode 100644 app/helpers/errorHandlers.js diff --git a/app/controllers/links/addLink.js b/app/controllers/links/addLink.js index 8670f1c..ab1261d 100644 --- a/app/controllers/links/addLink.js +++ b/app/controllers/links/addLink.js @@ -1,12 +1,12 @@ -const addLink = require('express').Router(); -const Link = require('../../models/links'); +const router = require('express').Router(); const sendResponse = require('../../helpers/sendResponse'); +const { addLink } = require('./services'); const log4js = require('log4js'); const logger = log4js.getLogger(); logger.level = 'error'; -addLink.post('/', async (req, res) => { +router.post('/', async (req, res) => { // const {linkName, linkAdd} = req.body; // validations req.check('linkName', 'link name is required').exists().isAlpha().isLength({ min: 5 }); @@ -18,11 +18,11 @@ addLink.post('/', async (req, res) => { } try { - const linkData = new Link({ + const linkData { linkName: req.body.linkName, linkAdd: req.body.linkAdd, - }); - await linkData.save(); + }; + await addLink(linkData); return sendResponse(res, 200, [], 'data saved successfully'); } catch (err) { logger.error(err); diff --git a/app/controllers/links/services.js b/app/controllers/links/services.js new file mode 100644 index 0000000..18f6fca --- /dev/null +++ b/app/controllers/links/services.js @@ -0,0 +1,15 @@ +const Link = require('../../models/links'); +const errorHandler = require('../../helpers/errorHandlers'); + +const findLinkById = async id => Link.findById(id); + +const addLink = async (linkData) => { + const newLink = new Link(linkData); + await newLink.save(); +}; + + +module.exports = { + addLink: errorHandler(addLink), + findLinkById: errorHandler(findLinkById), +}; diff --git a/app/helpers/errorHandlers.js b/app/helpers/errorHandlers.js new file mode 100644 index 0000000..5284a21 --- /dev/null +++ b/app/helpers/errorHandlers.js @@ -0,0 +1,6 @@ +// TODO: file name plural or singular + +const errorHandler = fn => (...params) => fn(...params).catch((err) { + console.log('Error occured', err); + // TODO: Add sentry or notification service +}) From d0ac78f874955d723df2faacfb9fc8ab05a7533b Mon Sep 17 00:00:00 2001 From: G Date: Tue, 11 Sep 2018 08:49:06 +0530 Subject: [PATCH 3/8] --fix : Add Link refactoring in WIP. --- app/controllers/links/addLink.js | 2 +- app/helpers/errorHandlers.js | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/controllers/links/addLink.js b/app/controllers/links/addLink.js index ab1261d..b85904b 100644 --- a/app/controllers/links/addLink.js +++ b/app/controllers/links/addLink.js @@ -18,7 +18,7 @@ router.post('/', async (req, res) => { } try { - const linkData { + const linkData = { linkName: req.body.linkName, linkAdd: req.body.linkAdd, }; diff --git a/app/helpers/errorHandlers.js b/app/helpers/errorHandlers.js index 5284a21..70a44cb 100644 --- a/app/helpers/errorHandlers.js +++ b/app/helpers/errorHandlers.js @@ -1,6 +1,10 @@ // TODO: file name plural or singular -const errorHandler = fn => (...params) => fn(...params).catch((err) { +const errorHandler = fn => (...params) => fn(...params).catch((err) => { console.log('Error occured', err); // TODO: Add sentry or notification service -}) +}); + +module.exports = { + errorHandler, +}; From 83e002bac1a8ed24fb3747269960e35b1389768d Mon Sep 17 00:00:00 2001 From: G Date: Tue, 11 Sep 2018 10:18:55 +0530 Subject: [PATCH 4/8] --wip: Using DB calls in services file. --- app/controllers/links/deleteLink.js | 10 +++++----- app/controllers/links/getAllLinks.js | 4 ++-- app/controllers/links/getOneLink.js | 4 ++-- app/controllers/links/services.js | 11 ++++++++--- 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/app/controllers/links/deleteLink.js b/app/controllers/links/deleteLink.js index 9db4628..37fce3e 100644 --- a/app/controllers/links/deleteLink.js +++ b/app/controllers/links/deleteLink.js @@ -1,12 +1,12 @@ -const deleteLink = require('express').Router(); -const Link = require('../../models/links'); +const router = require('express').Router(); +const { deleteLink } = require('./services'); const sendResponse = require('../../helpers/sendResponse'); const log4js = require('log4js'); const logger = log4js.getLogger(); logger.level = 'error'; -deleteLink.delete('/:id', async (req, res) => { +router.delete('/:id', async (req, res) => { // validate id req.check('id', 'id is required/invalid').exists().isValidObjectId(); @@ -17,8 +17,8 @@ deleteLink.delete('/:id', async (req, res) => { try { const { id } = req.params; - await Link.findByIdAndRemove(id); - return sendResponse(res, 200, [], 'deleted data successfully'); + await deleteLink(id); + return sendResponse(res, 200, [], 'Link deleted successfully'); } catch (err) { logger.error(err); return sendResponse(res, 500, [], 'something went wrong'); diff --git a/app/controllers/links/getAllLinks.js b/app/controllers/links/getAllLinks.js index aad3953..51a5f29 100644 --- a/app/controllers/links/getAllLinks.js +++ b/app/controllers/links/getAllLinks.js @@ -1,5 +1,5 @@ const getAllLinks = require('express').Router(); -const Link = require('../../models/links'); +const { findAllLinks } = require('./services'); const sendResponse = require('../../helpers/sendResponse'); const log4js = require('log4js'); @@ -8,7 +8,7 @@ logger.level = 'error'; getAllLinks.get('/', async (req, res) => { try { - const data = await Link.find(); + const data = await findAllLinks(); return sendResponse(res, 200, data, 'Get data successfully'); } catch (err) { logger.error(err); diff --git a/app/controllers/links/getOneLink.js b/app/controllers/links/getOneLink.js index b859c01..a7bf798 100644 --- a/app/controllers/links/getOneLink.js +++ b/app/controllers/links/getOneLink.js @@ -1,6 +1,6 @@ const getOneLink = require('express').Router(); -const Link = require('../../models/links'); const sendResponse = require('../../helpers/sendResponse'); +const { findLinkById } = require('./services'); const log4js = require('log4js'); const logger = log4js.getLogger(); @@ -16,7 +16,7 @@ getOneLink.get('/:id', async (req, res) => { try { const { id } = req.params; - const data = await Link.findById(id); + const data = await findLinkById(id); return sendResponse(res, 200, data, 'Get data successfully'); } catch (err) { logger.error(err); diff --git a/app/controllers/links/services.js b/app/controllers/links/services.js index 18f6fca..fb7491e 100644 --- a/app/controllers/links/services.js +++ b/app/controllers/links/services.js @@ -1,15 +1,20 @@ const Link = require('../../models/links'); -const errorHandler = require('../../helpers/errorHandlers'); - -const findLinkById = async id => Link.findById(id); +const { errorHandler } = require('../../helpers/errorHandlers'); const addLink = async (linkData) => { const newLink = new Link(linkData); await newLink.save(); }; +const deleteLink = async id => Link.findByIdAndRemove(id); + +const findAllLinks = async () => Link.find(); + +const findLinkById = async id => Link.findById(id); module.exports = { addLink: errorHandler(addLink), + deleteLink: errorHandler(deleteLink), + findAllLinks: errorHandler(findAllLinks), findLinkById: errorHandler(findLinkById), }; From 322383792b1fbd8ad5d8d705c9b699ccf73dc7d4 Mon Sep 17 00:00:00 2001 From: G Date: Wed, 12 Sep 2018 21:32:47 +0530 Subject: [PATCH 5/8] --refactor: Made a services folder to have all different service functionality at one place. --- app/controllers/links/addLink.js | 8 ++++---- app/controllers/links/deleteLink.js | 8 ++++---- app/controllers/links/getAllLinks.js | 2 +- app/controllers/links/getOneLink.js | 2 +- app/controllers/links/services.js | 20 -------------------- app/controllers/links/services/db.js | 20 ++++++++++++++++++++ 6 files changed, 30 insertions(+), 30 deletions(-) delete mode 100644 app/controllers/links/services.js create mode 100644 app/controllers/links/services/db.js diff --git a/app/controllers/links/addLink.js b/app/controllers/links/addLink.js index b85904b..588838b 100644 --- a/app/controllers/links/addLink.js +++ b/app/controllers/links/addLink.js @@ -1,12 +1,12 @@ -const router = require('express').Router(); +const addLink = require('express').Router(); const sendResponse = require('../../helpers/sendResponse'); -const { addLink } = require('./services'); +const { createLink } = require('./services/db'); const log4js = require('log4js'); const logger = log4js.getLogger(); logger.level = 'error'; -router.post('/', async (req, res) => { +addLink.post('/', async (req, res) => { // const {linkName, linkAdd} = req.body; // validations req.check('linkName', 'link name is required').exists().isAlpha().isLength({ min: 5 }); @@ -22,7 +22,7 @@ router.post('/', async (req, res) => { linkName: req.body.linkName, linkAdd: req.body.linkAdd, }; - await addLink(linkData); + await createLink(linkData); return sendResponse(res, 200, [], 'data saved successfully'); } catch (err) { logger.error(err); diff --git a/app/controllers/links/deleteLink.js b/app/controllers/links/deleteLink.js index 37fce3e..13baf11 100644 --- a/app/controllers/links/deleteLink.js +++ b/app/controllers/links/deleteLink.js @@ -1,12 +1,12 @@ -const router = require('express').Router(); -const { deleteLink } = require('./services'); +const deleteLink = require('express').Router(); +const { removeLink } = require('./services/db'); const sendResponse = require('../../helpers/sendResponse'); const log4js = require('log4js'); const logger = log4js.getLogger(); logger.level = 'error'; -router.delete('/:id', async (req, res) => { +deleteLink.delete('/:id', async (req, res) => { // validate id req.check('id', 'id is required/invalid').exists().isValidObjectId(); @@ -17,7 +17,7 @@ router.delete('/:id', async (req, res) => { try { const { id } = req.params; - await deleteLink(id); + await removeLink(id); return sendResponse(res, 200, [], 'Link deleted successfully'); } catch (err) { logger.error(err); diff --git a/app/controllers/links/getAllLinks.js b/app/controllers/links/getAllLinks.js index 51a5f29..57e2c92 100644 --- a/app/controllers/links/getAllLinks.js +++ b/app/controllers/links/getAllLinks.js @@ -1,5 +1,5 @@ const getAllLinks = require('express').Router(); -const { findAllLinks } = require('./services'); +const { findAllLinks } = require('./services/db'); const sendResponse = require('../../helpers/sendResponse'); const log4js = require('log4js'); diff --git a/app/controllers/links/getOneLink.js b/app/controllers/links/getOneLink.js index a7bf798..ef64f36 100644 --- a/app/controllers/links/getOneLink.js +++ b/app/controllers/links/getOneLink.js @@ -1,6 +1,6 @@ const getOneLink = require('express').Router(); const sendResponse = require('../../helpers/sendResponse'); -const { findLinkById } = require('./services'); +const { findLinkById } = require('./services/db'); const log4js = require('log4js'); const logger = log4js.getLogger(); diff --git a/app/controllers/links/services.js b/app/controllers/links/services.js deleted file mode 100644 index fb7491e..0000000 --- a/app/controllers/links/services.js +++ /dev/null @@ -1,20 +0,0 @@ -const Link = require('../../models/links'); -const { errorHandler } = require('../../helpers/errorHandlers'); - -const addLink = async (linkData) => { - const newLink = new Link(linkData); - await newLink.save(); -}; - -const deleteLink = async id => Link.findByIdAndRemove(id); - -const findAllLinks = async () => Link.find(); - -const findLinkById = async id => Link.findById(id); - -module.exports = { - addLink: errorHandler(addLink), - deleteLink: errorHandler(deleteLink), - findAllLinks: errorHandler(findAllLinks), - findLinkById: errorHandler(findLinkById), -}; diff --git a/app/controllers/links/services/db.js b/app/controllers/links/services/db.js new file mode 100644 index 0000000..a7efe78 --- /dev/null +++ b/app/controllers/links/services/db.js @@ -0,0 +1,20 @@ +const Link = require('../../../models/links'); +const { errorHandler } = require('../../../helpers/errorHandlers'); + +const createLink = async (linkData) => { + const newLink = new Link(linkData); + await newLink.save(); +}; + +const removeLink = async id => Link.findByIdAndRemove(id); + +const findAllLinks = async () => Link.find(); + +const findLinkById = async id => Link.findById(id); + +module.exports = { + createLink: errorHandler(createLink), + removeLink: errorHandler(removeLink), + findAllLinks: errorHandler(findAllLinks), + findLinkById: errorHandler(findLinkById), +}; From 9c1dcc49198c630bdc1e807d1664ba06416d422a Mon Sep 17 00:00:00 2001 From: G Date: Sat, 8 Sep 2018 21:36:45 +0530 Subject: [PATCH 6/8] --refactor: Migrated routes functions to controllers folder. --- app/{routes => controllers}/links/addLink.js | 0 app/{routes => controllers}/links/deleteLink.js | 0 app/{routes => controllers}/links/getAllLinks.js | 0 app/{routes => controllers}/links/getOneLink.js | 0 app/controllers/links/index.js | 11 +++++++++++ app/{routes => controllers}/links/updateLink.js | 0 app/routes/{links/index.js => links.js} | 7 +++---- 7 files changed, 14 insertions(+), 4 deletions(-) rename app/{routes => controllers}/links/addLink.js (100%) rename app/{routes => controllers}/links/deleteLink.js (100%) rename app/{routes => controllers}/links/getAllLinks.js (100%) rename app/{routes => controllers}/links/getOneLink.js (100%) create mode 100644 app/controllers/links/index.js rename app/{routes => controllers}/links/updateLink.js (100%) rename app/routes/{links/index.js => links.js} (54%) diff --git a/app/routes/links/addLink.js b/app/controllers/links/addLink.js similarity index 100% rename from app/routes/links/addLink.js rename to app/controllers/links/addLink.js diff --git a/app/routes/links/deleteLink.js b/app/controllers/links/deleteLink.js similarity index 100% rename from app/routes/links/deleteLink.js rename to app/controllers/links/deleteLink.js diff --git a/app/routes/links/getAllLinks.js b/app/controllers/links/getAllLinks.js similarity index 100% rename from app/routes/links/getAllLinks.js rename to app/controllers/links/getAllLinks.js diff --git a/app/routes/links/getOneLink.js b/app/controllers/links/getOneLink.js similarity index 100% rename from app/routes/links/getOneLink.js rename to app/controllers/links/getOneLink.js diff --git a/app/controllers/links/index.js b/app/controllers/links/index.js new file mode 100644 index 0000000..6a87188 --- /dev/null +++ b/app/controllers/links/index.js @@ -0,0 +1,11 @@ +const addLink = require('./addLink'); +const deleteLink = require('./deleteLink'); +const getAllLink = require('./getAllLinks'); +const getOneLink = require('./getOneLink'); + +module.exports = { + addLink, + deleteLink, + getAllLink, + getOneLink, +}; diff --git a/app/routes/links/updateLink.js b/app/controllers/links/updateLink.js similarity index 100% rename from app/routes/links/updateLink.js rename to app/controllers/links/updateLink.js diff --git a/app/routes/links/index.js b/app/routes/links.js similarity index 54% rename from app/routes/links/index.js rename to app/routes/links.js index 8ca32c3..1a6fe2b 100644 --- a/app/routes/links/index.js +++ b/app/routes/links.js @@ -1,8 +1,7 @@ const linksRoute = require('express').Router(); -const addLink = require('./addLink'); -const deleteLink = require('./deleteLink'); -const getAllLink = require('./getAllLinks'); -const getOneLink = require('./getOneLink'); +const { + addLink, deleteLink, getAllLink, getOneLink, +} = require('../controllers/links'); linksRoute.use('/', addLink); linksRoute.use('/', deleteLink); From 6a17ceb211b91f00062fe7de25507f87ca33176c Mon Sep 17 00:00:00 2001 From: G Date: Sat, 8 Sep 2018 21:44:26 +0530 Subject: [PATCH 7/8] --refactor: Separate folder for validation. --- app/helpers/validators.js | 8 ++++++++ server.js | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 app/helpers/validators.js diff --git a/app/helpers/validators.js b/app/helpers/validators.js new file mode 100644 index 0000000..2de3ad5 --- /dev/null +++ b/app/helpers/validators.js @@ -0,0 +1,8 @@ +const mongoose = require('mongoose'); + +const isValidObjectId = value => mongoose.Types.ObjectId.isValid(value); + +module.exports = { + isValidObjectId, +}; + diff --git a/server.js b/server.js index 6af2db5..51ec5d6 100644 --- a/server.js +++ b/server.js @@ -9,7 +9,8 @@ const port = process.env.PORT; const routes = require('./app/routes'); const log4js = require('log4js'); -const isValidObjectId = value => mongoose.Types.ObjectId.isValid(value); +const { isValidObjectId } = require('./app/helpers/validators'); + const logger = log4js.getLogger(); logger.level = 'debug'; From e33a935931219c609778f0c00af3c6e2a26a639d Mon Sep 17 00:00:00 2001 From: G Date: Thu, 20 Sep 2018 08:58:06 +0530 Subject: [PATCH 8/8] --refactor : Services resides at root level now. --- app/controllers/links/addLink.js | 2 +- app/controllers/links/deleteLink.js | 2 +- app/controllers/links/getAllLinks.js | 2 +- app/controllers/links/getOneLink.js | 2 +- .../links/services/db.js => services/database/link/index.js} | 0 5 files changed, 4 insertions(+), 4 deletions(-) rename app/{controllers/links/services/db.js => services/database/link/index.js} (100%) diff --git a/app/controllers/links/addLink.js b/app/controllers/links/addLink.js index 588838b..4c65846 100644 --- a/app/controllers/links/addLink.js +++ b/app/controllers/links/addLink.js @@ -1,6 +1,6 @@ const addLink = require('express').Router(); const sendResponse = require('../../helpers/sendResponse'); -const { createLink } = require('./services/db'); +const { createLink } = require('../../services/database/link'); const log4js = require('log4js'); const logger = log4js.getLogger(); diff --git a/app/controllers/links/deleteLink.js b/app/controllers/links/deleteLink.js index 13baf11..9254f23 100644 --- a/app/controllers/links/deleteLink.js +++ b/app/controllers/links/deleteLink.js @@ -1,5 +1,5 @@ const deleteLink = require('express').Router(); -const { removeLink } = require('./services/db'); +const { removeLink } = require('../../services/database/link'); const sendResponse = require('../../helpers/sendResponse'); const log4js = require('log4js'); diff --git a/app/controllers/links/getAllLinks.js b/app/controllers/links/getAllLinks.js index 57e2c92..ed7b49e 100644 --- a/app/controllers/links/getAllLinks.js +++ b/app/controllers/links/getAllLinks.js @@ -1,5 +1,5 @@ const getAllLinks = require('express').Router(); -const { findAllLinks } = require('./services/db'); +const { findAllLinks } = require('../../services/database/link'); const sendResponse = require('../../helpers/sendResponse'); const log4js = require('log4js'); diff --git a/app/controllers/links/getOneLink.js b/app/controllers/links/getOneLink.js index ef64f36..c5ef837 100644 --- a/app/controllers/links/getOneLink.js +++ b/app/controllers/links/getOneLink.js @@ -1,6 +1,6 @@ const getOneLink = require('express').Router(); const sendResponse = require('../../helpers/sendResponse'); -const { findLinkById } = require('./services/db'); +const { findLinkById } = require('../../services/database/link'); const log4js = require('log4js'); const logger = log4js.getLogger(); diff --git a/app/controllers/links/services/db.js b/app/services/database/link/index.js similarity index 100% rename from app/controllers/links/services/db.js rename to app/services/database/link/index.js