From 37db77c40c379896c33eaec7e86ec248d9d93b57 Mon Sep 17 00:00:00 2001 From: Rohan Date: Tue, 1 Oct 2019 17:55:48 +0530 Subject: [PATCH 1/4] changes --- controllers/users_controller.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/controllers/users_controller.js b/controllers/users_controller.js index 9528ac5..aba4730 100644 --- a/controllers/users_controller.js +++ b/controllers/users_controller.js @@ -32,11 +32,8 @@ module.exports.users = async (req, res) => { updatedAt: "desc", role: "asc" }); - if (users.length === 0) { - res.status(404).json({ message: "No users Found!!" }); - } else { - res.status(200).json({ message: "success", users }); - } + + res.status(200).json({ message: "success", users }); } catch (err) { res.status(500).json({ message: err.message, error: true }); } From 64df94cbad6fa256f4a11b52f6bc9e997f75912a Mon Sep 17 00:00:00 2001 From: Rohan Date: Wed, 2 Oct 2019 13:38:32 +0530 Subject: [PATCH 2/4] change all projects api --- controllers/projects_controller.js | 155 ++++++++++++++--------------- 1 file changed, 76 insertions(+), 79 deletions(-) diff --git a/controllers/projects_controller.js b/controllers/projects_controller.js index 9f1d1c3..bd1e58c 100644 --- a/controllers/projects_controller.js +++ b/controllers/projects_controller.js @@ -1,94 +1,91 @@ -const { deleteImg } = require('../config/imgUpload'); +const { deleteImg } = require("../config/imgUpload"); module.exports.projects = async (req, res) => { - try { - let projects = await Project.find().sort({ updatedAt: 'desc' }); - if (projects.length === 0) { - res.status(404).json({ message: 'No Projects Found!!' }); - } else { - res.status(200).json({ message: 'success', projects }); - } - } catch (err) { - res.status(500).json({ message: err.message, error: true }); - } + try { + let projects = await Project.find().sort({ updatedAt: "desc" }); + + res.status(200).json({ message: "success", projects }); + } catch (err) { + res.status(500).json({ message: err.message, error: true }); + } }; module.exports.addProject = async (req, res) => { - let { title, description } = req.body; - if (!req.file) { - res.status(400).json({ message: 'Please upload an image!!' }); - } else { - try { - let project = await Project.findOne({ title }); - if (project) { - res.status(400).json({ - message: 'Project title already exists!!' - }); - } else { - let newProject = { - title, - description, - img: { - id: req.file.public_id, - url: req.file.secure_url - } - }; - await Project.create(newProject); - res.status(200).json({ message: 'success' }); - } - } catch (err) { - res.status(500).json({ message: err.message, error: true }); - } - } + let { title, description } = req.body; + if (!req.file) { + res.status(400).json({ message: "Please upload an image!!" }); + } else { + try { + let project = await Project.findOne({ title }); + if (project) { + res.status(400).json({ + message: "Project title already exists!!" + }); + } else { + let newProject = { + title, + description, + img: { + id: req.file.public_id, + url: req.file.secure_url + } + }; + await Project.create(newProject); + res.status(200).json({ message: "success" }); + } + } catch (err) { + res.status(500).json({ message: err.message, error: true }); + } + } }; module.exports.updateProject = async (req, res) => { - let { title, description } = req.body; - let img = {}; - try { - let project = await Project.findById(req.params.id); - if (project) { - if (req.file) { - await deleteImg(project.img.id); - project.img.id = req.file.public_id; - project.img.url = req.file.secure_url; - } - project.title = title; - project.description = description; - await project.save(); - res.status(200).json({ message: 'success' }); - } else { - res.status(404).json({ message: 'Invalid Project' }); - } - } catch (err) { - res.status(500).json({ message: err.message, error: true }); - } + let { title, description } = req.body; + let img = {}; + try { + let project = await Project.findById(req.params.id); + if (project) { + if (req.file) { + await deleteImg(project.img.id); + project.img.id = req.file.public_id; + project.img.url = req.file.secure_url; + } + project.title = title; + project.description = description; + await project.save(); + res.status(200).json({ message: "success" }); + } else { + res.status(404).json({ message: "Invalid Project" }); + } + } catch (err) { + res.status(500).json({ message: err.message, error: true }); + } }; module.exports.deleteProject = async (req, res) => { - try { - let project = await Project.findById(req.params.id); - if (project) { - await deleteImg(project.img.id); - await Project.findByIdAndDelete(req.params.id); - res.status(200).json({ message: 'success' }); - } else { - res.status(404).json({ message: 'Invalid Project' }); - } - } catch (err) { - res.status(500).json({ message: err.message, error: true }); - } + try { + let project = await Project.findById(req.params.id); + if (project) { + await deleteImg(project.img.id); + await Project.findByIdAndDelete(req.params.id); + res.status(200).json({ message: "success" }); + } else { + res.status(404).json({ message: "Invalid Project" }); + } + } catch (err) { + res.status(500).json({ message: err.message, error: true }); + } }; module.exports.viewProject = async (req, res) => { - try { - let project = await Project.findById(req.params.id); - if (project) { - res.status(200).json({ message: 'success', project }); - } else { - res.status(404).json({ message: 'Invalid Project' }); - } - } catch (err) { - res.status(500).json({ message: err.message, error: true }); - } + try { + let project = await Project.findById(req.params.id); + if (project) { + res.status(200).json({ message: "success", project }); + } else { + res.status(404).json({ message: "Invalid Project" }); + } + } catch (err) { + res.status(500).json({ message: err.message, error: true }); + } }; From f3651f7715ab17dd41933ec0c0fedd72bff62ef4 Mon Sep 17 00:00:00 2001 From: Rohan Date: Wed, 2 Oct 2019 14:58:23 +0530 Subject: [PATCH 3/4] optimise image upload --- middleware/validations.js | 395 +++++++++++++++++++------------------- routes/api/v1/projects.js | 44 ++--- 2 files changed, 217 insertions(+), 222 deletions(-) diff --git a/middleware/validations.js b/middleware/validations.js index 43dc54e..a2be8c8 100644 --- a/middleware/validations.js +++ b/middleware/validations.js @@ -1,230 +1,231 @@ // regex definitions let emailRegex = /\S+@\S+\.\S+/, - phoneRegex = /(^[6-9]{1}[0-9]{9}$)/, - passwordRegex = new RegExp('^(?=.*[A-Za-z])(?=.*[0-9])(?=.{6,})'); + phoneRegex = /(^[6-9]{1}[0-9]{9}$)/, + passwordRegex = new RegExp("^(?=.*[A-Za-z])(?=.*[0-9])(?=.{6,})"); module.exports.userValidation = (req, res, next) => { - let { name, email, password } = req.body; - if (!email || !name || !password) { - return res.status(400).json({ message: 'All fields are mandatory!!' }); - } - if (emailRegex.test(email)) { - if (passwordRegex.test(password)) { - return next(); - } else { - res.status(400).json({ - message: - 'Password must be atleast 6 characters long and contain atleast one alphabet and number!!' - }); - } - } else { - res.status(400).json({ message: 'EmailID not valid!!' }); - } + let { name, email, password } = req.body; + if (!email || !name || !password) { + return res.status(400).json({ message: "All fields are mandatory!!" }); + } + if (emailRegex.test(email)) { + if (passwordRegex.test(password)) { + return next(); + } else { + res.status(400).json({ + message: + "Password must be atleast 6 characters long and contain atleast one alphabet and number!!" + }); + } + } else { + res.status(400).json({ message: "EmailID not valid!!" }); + } }; module.exports.volunteerValidation = (req, res, next) => { - let { - email, - name, - phone, - alternatePhone, - currentAddress, - permanentAddress, - branch, - year, - bloodgroup, - college, - // aboutUddeshhya, - heardFrom, - workSpan, - skills, - suggestion, - projects - } = req.body; + let { + email, + name, + phone, + alternatePhone, + currentAddress, + permanentAddress, + branch, + year, + bloodgroup, + college, + // aboutUddeshhya, + heardFrom, + workSpan, + skills, + suggestion, + projects + } = req.body; - // checking required fields - if ( - !email || - !name || - !phone || - !currentAddress || - !permanentAddress || - !branch || - !year || - !bloodgroup || - !college || - // !aboutUddeshhya || - !heardFrom || - !workSpan || - !projects - ) { - res.status(400).json({ message: 'Some required fields are missing!!' }); - } + // checking required fields + if ( + !email || + !name || + !phone || + !currentAddress || + !permanentAddress || + !branch || + !year || + !bloodgroup || + !college || + // !aboutUddeshhya || + !heardFrom || + !workSpan || + !projects + ) { + res.status(400).json({ message: "Some required fields are missing!!" }); + } - // branch, year, blood group values will be fixed in dropdown, need not to be validated!! - // validate inputs - if (emailRegex.test(email)) { - if (phoneRegex.test(Number(phone))) { - if (!alternatePhone || phoneRegex.test(alternatePhone)) { - return next(); - } else { - res.status(400).json({ - message: 'Alternate Contact not valid!!' - }); - } - } else { - res.status(400).json({ message: 'Contact not valid!!' }); - } - } else { - res.status(400).json({ message: 'Email address not valid!!' }); - } + // branch, year, blood group values will be fixed in dropdown, need not to be validated!! + // validate inputs + if (emailRegex.test(email)) { + if (phoneRegex.test(Number(phone))) { + if (!alternatePhone || phoneRegex.test(alternatePhone)) { + return next(); + } else { + res.status(400).json({ + message: "Alternate Contact not valid!!" + }); + } + } else { + res.status(400).json({ message: "Contact not valid!!" }); + } + } else { + res.status(400).json({ message: "Email address not valid!!" }); + } }; module.exports.projectValidation = (req, res, next) => { - let { title, description } = req.body; - if (!title || !description) { - res.status(400).json({ message: 'All fields are mandatory!!' }); - } else { - return next(); - } + let { title, description } = req.body; + if (!title || !description) { + res.status(400).json({ message: "All fields are mandatory!!" }); + } else { + req.file = req.files[0]; + return next(); + } }; module.exports.teamValidation = (req, res, next) => { - let { name, position, fb, insta, linkedin, phone, email } = req.body; - if (!name || !position) { - res.status(400).json({ message: 'Name and Position are mandatory!!' }); - } - if (!phone || phoneRegex.test(phone)) { - if (!email || emailRegex.test(email)) { - return next(); - } else { - res.status(400).json({ message: 'Email address not valid!!' }); - } - } else { - res.status(400).json({ message: 'Phone number not valid!!' }); - } + let { name, position, fb, insta, linkedin, phone, email } = req.body; + if (!name || !position) { + res.status(400).json({ message: "Name and Position are mandatory!!" }); + } + if (!phone || phoneRegex.test(phone)) { + if (!email || emailRegex.test(email)) { + return next(); + } else { + res.status(400).json({ message: "Email address not valid!!" }); + } + } else { + res.status(400).json({ message: "Phone number not valid!!" }); + } }; module.exports.bloodDonorValidation = (req, res, next) => { - let { - name, - bloodGroup, - phone, - email, - dob, // format: YYYY/MM/DD - address, - hasDonated - } = req.body; + let { + name, + bloodGroup, + phone, + email, + dob, // format: YYYY/MM/DD + address, + hasDonated + } = req.body; - if (!name || !bloodGroup || !phone || !email || !dob || !address) { - res.status(400).json({ message: 'All fields are mandtaory!!' }); - } - // 18 yrs from dob - let newDate = new Date( - new Date(dob).setFullYear(new Date(dob).getFullYear() + 18) - ); + if (!name || !bloodGroup || !phone || !email || !dob || !address) { + res.status(400).json({ message: "All fields are mandtaory!!" }); + } + // 18 yrs from dob + let newDate = new Date( + new Date(dob).setFullYear(new Date(dob).getFullYear() + 18) + ); - // test fields - if (emailRegex.test(email)) { - if (phoneRegex.test(Number(phone))) { - if (newDate <= new Date(Date.now())) { - return next(); - } else { - res.status(400).json({ - message: 'Must be atleast 18 yrs old!!' - }); - } - } else { - res.status(400).json({ message: 'Contact not valid!!' }); - } - } else { - res.status(400).json({ message: 'Email address not valid!!' }); - } + // test fields + if (emailRegex.test(email)) { + if (phoneRegex.test(Number(phone))) { + if (newDate <= new Date(Date.now())) { + return next(); + } else { + res.status(400).json({ + message: "Must be atleast 18 yrs old!!" + }); + } + } else { + res.status(400).json({ message: "Contact not valid!!" }); + } + } else { + res.status(400).json({ message: "Email address not valid!!" }); + } }; module.exports.requestBloodValidation = (req, res, next) => { - let { - name, - bloodGroup, - phone, - dob, - address, - pincode, - requestFor, - require, - units, - reason, - neededBy, - timings - } = req.body; - if ( - !name || - !bloodGroup || - !phone || - !dob || - !address || - !pincode || - !require || - !units || - !neededBy || - !timings - ) { - res.status(400).json({ message: 'Some fields are missing!!' }); - } + let { + name, + bloodGroup, + phone, + dob, + address, + pincode, + requestFor, + require, + units, + reason, + neededBy, + timings + } = req.body; + if ( + !name || + !bloodGroup || + !phone || + !dob || + !address || + !pincode || + !require || + !units || + !neededBy || + !timings + ) { + res.status(400).json({ message: "Some fields are missing!!" }); + } - let pincodeRegex = /(^[0-9]{6}$)/gm; - let unitsRegex = /(^[1-4]{1}$)/gm; + let pincodeRegex = /(^[0-9]{6}$)/gm; + let unitsRegex = /(^[1-4]{1}$)/gm; - if (phoneRegex.test(Number(phone))) { - if (pincodeRegex.test(Number(pincode))) { - if (unitsRegex.test(Number(units))) { - return next(); - } else { - res.status(400).json({ - message: 'Max. 4 units allowed!!' - }); - } - } else { - res.status(400).json({ message: 'Pincode not valid!!' }); - } - } else { - res.status(400).json({ message: 'Contact not valid!!' }); - } + if (phoneRegex.test(Number(phone))) { + if (pincodeRegex.test(Number(pincode))) { + if (unitsRegex.test(Number(units))) { + return next(); + } else { + res.status(400).json({ + message: "Max. 4 units allowed!!" + }); + } + } else { + res.status(400).json({ message: "Pincode not valid!!" }); + } + } else { + res.status(400).json({ message: "Contact not valid!!" }); + } }; module.exports.messageValidation = (req, res, next) => { - let { name, email, phone, message } = req.body; - if (!email || !name || !message) { - res.status(400).json({ message: 'Some fields are missing!!' }); - } - if (emailRegex.test(email)) { - if (phoneRegex.test(Number(phone))) { - return next(); - } else { - res.status(400).json({ message: 'Contact not valid!!' }); - } - } else { - res.status(400).json({ message: 'Email address not valid!!' }); - } + let { name, email, phone, message } = req.body; + if (!email || !name || !message) { + res.status(400).json({ message: "Some fields are missing!!" }); + } + if (emailRegex.test(email)) { + if (phoneRegex.test(Number(phone))) { + return next(); + } else { + res.status(400).json({ message: "Contact not valid!!" }); + } + } else { + res.status(400).json({ message: "Email address not valid!!" }); + } }; module.exports.donorValidation = (req, res, next) => { - let { name, email, phone, address, amount } = req.body; - let amountRegex = /(^[0-9]{1,9}$)/gm; + let { name, email, phone, address, amount } = req.body; + let amountRegex = /(^[0-9]{1,9}$)/gm; - if (emailRegex.test(email)) { - if (phoneRegex.test(phone)) { - if (amountRegex.test(amount)) { - return next(); - } else { - res.status(400).json({ - message: 'Please enter a valid amount!!' - }); - } - } else { - res.status(400).json({ message: 'Contact number not valid!!' }); - } - } else { - res.status(400).json({ message: 'Email address not valid!!' }); - } + if (emailRegex.test(email)) { + if (phoneRegex.test(phone)) { + if (amountRegex.test(amount)) { + return next(); + } else { + res.status(400).json({ + message: "Please enter a valid amount!!" + }); + } + } else { + res.status(400).json({ message: "Contact number not valid!!" }); + } + } else { + res.status(400).json({ message: "Email address not valid!!" }); + } }; diff --git a/routes/api/v1/projects.js b/routes/api/v1/projects.js index 552a12c..00e90bd 100644 --- a/routes/api/v1/projects.js +++ b/routes/api/v1/projects.js @@ -1,44 +1,38 @@ -const express = require('express'); +const express = require("express"); const router = express.Router(); // load controllers let { - projects, - addProject, - updateProject, - deleteProject, - viewProject -} = require('../../../controllers/projects_controller'); + projects, + addProject, + updateProject, + deleteProject, + viewProject +} = require("../../../controllers/projects_controller"); // middlewares -let { adminAuth } = require('../../../middleware/auth'); -let { projectValidation } = require('../../../middleware/validations'); +let { adminAuth } = require("../../../middleware/auth"); +let { projectValidation } = require("../../../middleware/validations"); // image uploader -let { upload } = require('../../../config/imgUpload'); +let { upload } = require("../../../config/imgUpload"); // all projects -router.get('/', projects); +router.get("/", projects); // add a project -router.post( - '/add', - adminAuth, - projectValidation, - upload.single('file'), - addProject -); +router.post("/add", adminAuth, upload.any(), projectValidation, addProject); // update a project router.post( - '/update/:id', - adminAuth, - projectValidation, - upload.single('file'), - updateProject + "/update/:id", + adminAuth, + projectValidation, + upload.single("file"), + updateProject ); // delete a project -router.get('/delete/:id', adminAuth, deleteProject); +router.get("/delete/:id", adminAuth, deleteProject); // view a project -router.get('/:id', viewProject); +router.get("/:id", viewProject); // export router module.exports = router; From afcdb4f1f756f8427c3211486fac28f255e423d7 Mon Sep 17 00:00:00 2001 From: Rohan Date: Wed, 2 Oct 2019 15:56:18 +0530 Subject: [PATCH 4/4] changes: changed image upload ways remove team sorting by positon --- controllers/team_controller.js | 173 ++++++++++++++++----------------- middleware/validations.js | 3 +- routes/api/v1/team.js | 2 +- 3 files changed, 89 insertions(+), 89 deletions(-) diff --git a/controllers/team_controller.js b/controllers/team_controller.js index 0fd80ef..03d5f04 100644 --- a/controllers/team_controller.js +++ b/controllers/team_controller.js @@ -1,102 +1,101 @@ -const { deleteImg } = require('../config/imgUpload'); +const { deleteImg } = require("../config/imgUpload"); module.exports.team = async (req, res) => { - try { - let team = await Team.find().sort({ position: 'asc' }); - if (team.length === 0) { - res.status(404).json({ message: 'No team members Found!!' }); - } else { - res.status(200).json({ message: 'success', team }); - } - } catch (err) { - res.status(500).json({ message: err.message, error: true }); - } + try { + let team = await Team.find().sort({ createdAt: "desc" }); + + res.status(200).json({ message: "success", team }); + } catch (err) { + res.status(500).json({ message: err.message, error: true }); + } }; module.exports.addTeamMember = async (req, res) => { - let { name, position, fb, insta, linkedin, phone, email } = req.body; - if (!req.file) { - res.status(400).json({ message: 'Please upload an image!!' }); - } else { - try { - let team = await Team.findOne({ name, position }); - if (team) { - res.status(400).json({ - message: 'Team Member already exists!!' - }); - } else { - let newTeamMember = { - name, - position, - fb, - insta, - linkedin, - phone, - email, - img: { - id: req.file.public_id, - url: req.file.secure_url - } - }; - await Team.create(newTeamMember); - res.status(200).json({ message: 'success' }); - } - } catch (err) { - res.status(500).json({ message: err.message, error: true }); - } - } + let { name, position, role, fb, insta, linkedin, phone, email } = req.body; + + if (!req.file) { + res.status(400).json({ message: "Please upload an image!!" }); + } else { + try { + let team = await Team.findOne({ name, position }); + if (team) { + res.status(400).json({ + message: "Team Member already exists!!" + }); + } else { + let newTeamMember = { + name, + position, + role, + fb, + insta, + linkedin, + phone, + email, + img: { + id: req.file.public_id, + url: req.file.secure_url + } + }; + await Team.create(newTeamMember); + res.status(200).json({ message: "success" }); + } + } catch (err) { + res.status(500).json({ message: err.message, error: true }); + } + } }; module.exports.updateTeamMember = async (req, res) => { - let { position, fb, insta, linkedin, phone, email } = req.body; // name field readonly in frontend - try { - let team = await Team.findById(req.params.id); - if (team) { - if (req.file) { - await deleteImg(team.img.id); - team.img.id = req.file.public_id; - team.img.url = req.file.secure_url; - } - team.position = position; - team.fb = fb; - team.insta = insta; - team.linkedin = linkedin; - team.phone = phone; - team.email = email; - await team.save(); - res.status(200).json({ message: 'success' }); - } else { - res.status(404).json({ message: 'Invalid Request' }); - } - } catch (err) { - res.status(500).json({ message: err.message, error: true }); - } + let { position, fb, insta, linkedin, phone, email } = req.body; // name field readonly in frontend + try { + let team = await Team.findById(req.params.id); + if (team) { + if (req.file) { + await deleteImg(team.img.id); + team.img.id = req.file.public_id; + team.img.url = req.file.secure_url; + } + team.position = position; + team.fb = fb; + team.insta = insta; + team.linkedin = linkedin; + team.phone = phone; + team.email = email; + await team.save(); + res.status(200).json({ message: "success" }); + } else { + res.status(404).json({ message: "Invalid Request" }); + } + } catch (err) { + res.status(500).json({ message: err.message, error: true }); + } }; module.exports.deleteTeamMember = async (req, res) => { - try { - let team = await Team.findById(req.params.id); - if (team) { - await deleteImg(team.img.id); - await Team.findByIdAndDelete(req.params.id); - res.status(200).json({ message: 'success' }); - } else { - res.status(404).json({ message: 'Invalid Team Member' }); - } - } catch (err) { - res.status(500).json({ message: err.message, error: true }); - } + try { + let team = await Team.findById(req.params.id); + if (team) { + await deleteImg(team.img.id); + await Team.findByIdAndDelete(req.params.id); + res.status(200).json({ message: "success" }); + } else { + res.status(404).json({ message: "Invalid Team Member" }); + } + } catch (err) { + res.status(500).json({ message: err.message, error: true }); + } }; module.exports.viewTeamMember = async (req, res) => { - try { - let team = await Team.findById(req.params.id); - if (team) { - res.status(200).json({ message: 'success', team }); - } else { - res.status(404).json({ message: 'Invalid Team Member' }); - } - } catch (err) { - res.status(500).json({ message: err.message, error: true }); - } + try { + let team = await Team.findById(req.params.id); + if (team) { + res.status(200).json({ message: "success", team }); + } else { + res.status(404).json({ message: "Invalid Team Member" }); + } + } catch (err) { + res.status(500).json({ message: err.message, error: true }); + } }; diff --git a/middleware/validations.js b/middleware/validations.js index a2be8c8..6bbc1f3 100644 --- a/middleware/validations.js +++ b/middleware/validations.js @@ -95,8 +95,9 @@ module.exports.teamValidation = (req, res, next) => { if (!name || !position) { res.status(400).json({ message: "Name and Position are mandatory!!" }); } - if (!phone || phoneRegex.test(phone)) { + if (!phone || phoneRegex.test(Number(phone))) { if (!email || emailRegex.test(email)) { + req.file = req.files[0]; return next(); } else { res.status(400).json({ message: "Email address not valid!!" }); diff --git a/routes/api/v1/team.js b/routes/api/v1/team.js index 74df63d..d54884b 100644 --- a/routes/api/v1/team.js +++ b/routes/api/v1/team.js @@ -23,8 +23,8 @@ router.get('/', team); router.post( '/add', adminAuth, + upload.any(), teamValidation, - upload.single('file'), addTeamMember ); // update team member