create, update, delete and get employee
This commit is contained in:
parent
c466e59d35
commit
40a542a7e6
@ -5,6 +5,6 @@ EMAIL_USERNAME=krish@sentientgeeks.com
|
|||||||
EMAIL_PASSWORD=123456
|
EMAIL_PASSWORD=123456
|
||||||
NODE_ENV=development
|
NODE_ENV=development
|
||||||
PORT=3000
|
PORT=3000
|
||||||
MONGO_URI_TESTS=mongodb://mongodb:27017/sg-node-express-rest-api
|
MONGO_URI_TESTS=mongodb://localhost:27017/sg-node-express-rest-api
|
||||||
MONGO_URI=mongodb://mongodb:27017/sg-node-express-rest-api
|
MONGO_URI=mongodb://localhost:27017/sg-node-express-rest-api
|
||||||
JWT_EXPIRATION_MINUTES=300
|
JWT_EXPIRATION_MINUTES=300
|
60
src/api/controllers/emp.controller.js
Normal file
60
src/api/controllers/emp.controller.js
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
const Employee = require("../models/employee.model");
|
||||||
|
|
||||||
|
exports.empreg = async (req, res, next) => {
|
||||||
|
try {
|
||||||
|
const employee = new Employee(req.body);
|
||||||
|
const savedEmployee = await employee.save();
|
||||||
|
res.status(201).send(employee);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(400).send(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// router.get('/student/:id',
|
||||||
|
exports.empget = async (req, res) => {
|
||||||
|
const employee = await Employee.findById(req.params.id);
|
||||||
|
res.send(employee);
|
||||||
|
};
|
||||||
|
|
||||||
|
//router.put("/updatestudent/:id",
|
||||||
|
exports.empupdate = async (req, res, next) => {
|
||||||
|
Employee.findByIdAndUpdate(
|
||||||
|
req.params.id,
|
||||||
|
{ $set: req.body },
|
||||||
|
function (err, employee) {
|
||||||
|
if (err) return next(err);
|
||||||
|
res.send("data udpated");
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
//router.delete("/deletestudent/:id",
|
||||||
|
exports.empdel = async (req, res) => {
|
||||||
|
Employee.findByIdAndRemove(req.params.id, function (err) {
|
||||||
|
if (err) return next(err);
|
||||||
|
res.send("data Deleted");
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//post with id
|
||||||
|
exports.emppost = async (req, res, next) => {
|
||||||
|
try {
|
||||||
|
const id = req.params.id
|
||||||
|
const employee = new Employee({...req.body, user_id:id});
|
||||||
|
const savedEmployee = await employee.save();
|
||||||
|
res.status(201).send(employee);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(400).send(error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// router.get('/showstudent',
|
||||||
|
exports.empshow = async (req, res) => {
|
||||||
|
const employee = await Employee.find(
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
_id: 0,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
res.send(employee);
|
||||||
|
};
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
const httpStatus = require('http-status');
|
const httpStatus = require("http-status");
|
||||||
const { omit } = require('lodash');
|
const { omit } = require("lodash");
|
||||||
const User = require('../models/user.model');
|
const User = require("../models/user.model");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load user and append to req.
|
* Load user and append to req.
|
||||||
@ -51,10 +51,9 @@ exports.replace = async (req, res, next) => {
|
|||||||
try {
|
try {
|
||||||
const { user } = req.locals;
|
const { user } = req.locals;
|
||||||
const newUser = new User(req.body);
|
const newUser = new User(req.body);
|
||||||
const ommitRole = user.role !== 'admin' ? 'role' : '';
|
const ommitRole = user.role !== "admin" ? "role" : "";
|
||||||
const newUserObject = omit(newUser.toObject(), '_id', ommitRole);
|
const newUserObject = omit(newUser.toObject(), "_id", ommitRole);
|
||||||
|
|
||||||
|
|
||||||
res.json(savedUser.transform());
|
res.json(savedUser.transform());
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(User.checkDuplicateEmail(error));
|
next(User.checkDuplicateEmail(error));
|
||||||
@ -66,13 +65,14 @@ exports.replace = async (req, res, next) => {
|
|||||||
* @public
|
* @public
|
||||||
*/
|
*/
|
||||||
exports.update = (req, res, next) => {
|
exports.update = (req, res, next) => {
|
||||||
const ommitRole = req.locals.user.role !== 'admin' ? 'role' : '';
|
const ommitRole = req.locals.user.role !== "admin" ? "role" : "";
|
||||||
const updatedUser = omit(req.body, ommitRole);
|
const updatedUser = omit(req.body, ommitRole);
|
||||||
const user = Object.assign(req.locals.user, updatedUser);
|
const user = Object.assign(req.locals.user, updatedUser);
|
||||||
|
|
||||||
user.save()
|
user
|
||||||
.then(savedUser => res.json(savedUser.transform()))
|
.save()
|
||||||
.catch(e => next(User.checkDuplicateEmail(e)));
|
.then((savedUser) => res.json(savedUser.transform()))
|
||||||
|
.catch((e) => next(User.checkDuplicateEmail(e)));
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -82,7 +82,7 @@ exports.update = (req, res, next) => {
|
|||||||
exports.list = async (req, res, next) => {
|
exports.list = async (req, res, next) => {
|
||||||
try {
|
try {
|
||||||
const users = await User.list(req.query);
|
const users = await User.list(req.query);
|
||||||
const transformedUsers = users.map(user => user.transform());
|
const transformedUsers = users.map((user) => user.transform());
|
||||||
res.json(transformedUsers);
|
res.json(transformedUsers);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
next(error);
|
next(error);
|
||||||
@ -96,7 +96,8 @@ exports.list = async (req, res, next) => {
|
|||||||
exports.remove = (req, res, next) => {
|
exports.remove = (req, res, next) => {
|
||||||
const { user } = req.locals;
|
const { user } = req.locals;
|
||||||
|
|
||||||
user.remove()
|
user
|
||||||
|
.remove()
|
||||||
.then(() => res.status(httpStatus.NO_CONTENT).end())
|
.then(() => res.status(httpStatus.NO_CONTENT).end())
|
||||||
.catch(e => next(e));
|
.catch((e) => next(e));
|
||||||
};
|
};
|
||||||
|
35
src/api/models/employee.model.js
Normal file
35
src/api/models/employee.model.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
const mongoose = require("mongoose");
|
||||||
|
|
||||||
|
const employeeSchema = new mongoose.Schema({
|
||||||
|
fname: {
|
||||||
|
type: String,
|
||||||
|
maxlength: 128,
|
||||||
|
trim: true,
|
||||||
|
},
|
||||||
|
lastname: {
|
||||||
|
type: String,
|
||||||
|
maxlength: 128,
|
||||||
|
trim: true,
|
||||||
|
},
|
||||||
|
empid: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
unique: true,
|
||||||
|
},
|
||||||
|
designation: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
dateofjoining: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
// userid (fkey of user)
|
||||||
|
user_id: {
|
||||||
|
type: mongoose.Schema.Types.ObjectId,
|
||||||
|
ref: "User",
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = mongoose.model("Employee", employeeSchema);
|
@ -4,7 +4,8 @@ const { omitBy, isNil } = require('lodash');
|
|||||||
const bcrypt = require('bcryptjs');
|
const bcrypt = require('bcryptjs');
|
||||||
const moment = require('moment-timezone');
|
const moment = require('moment-timezone');
|
||||||
const jwt = require('jwt-simple');
|
const jwt = require('jwt-simple');
|
||||||
const uuidv4 = require('uuid/v4');
|
// const uuidv4 = require('uuid/v4');
|
||||||
|
const { v4: uuidv4 } = require('uuid');
|
||||||
const APIError = require('../utils/APIError');
|
const APIError = require('../utils/APIError');
|
||||||
const { env, jwtSecret, jwtExpirationInterval } = require('../../config/vars');
|
const { env, jwtSecret, jwtExpirationInterval } = require('../../config/vars');
|
||||||
|
|
||||||
@ -55,6 +56,11 @@ const userSchema = new mongoose.Schema({
|
|||||||
timestamps: true,
|
timestamps: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
userSchema.virtual('employee', {
|
||||||
|
ref: 'employee',
|
||||||
|
localField: '_id',
|
||||||
|
foreignField: 'user_id'
|
||||||
|
})
|
||||||
/**
|
/**
|
||||||
* Add your
|
* Add your
|
||||||
* - pre-save hooks
|
* - pre-save hooks
|
||||||
|
@ -43,7 +43,6 @@ const router = express.Router();
|
|||||||
router.route('/register')
|
router.route('/register')
|
||||||
.post(validate(register), controller.register);
|
.post(validate(register), controller.register);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @api {post} v1/auth/login Login
|
* @api {post} v1/auth/login Login
|
||||||
* @apiDescription Get an accessToken
|
* @apiDescription Get an accessToken
|
||||||
|
17
src/api/routes/v1/emp.route.js
Normal file
17
src/api/routes/v1/emp.route.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
const express = require('express');
|
||||||
|
const controller = require('../../controllers/emp.controller');
|
||||||
|
const {employee} = require('../../validations/emp.validation');
|
||||||
|
const { validate, ValidationError, Joi } = require('express-validation')
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
router.route('/reg')
|
||||||
|
.post(validate(employee), controller.empreg)
|
||||||
|
.get( controller.empshow);
|
||||||
|
|
||||||
|
router.route('/emp/:id')
|
||||||
|
.post(validate(employee), controller.emppost)
|
||||||
|
.get(controller.empget)
|
||||||
|
.put(validate(employee), controller.empupdate)
|
||||||
|
.delete(controller.empdel)
|
||||||
|
|
||||||
|
module.exports = router;
|
@ -1,6 +1,7 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const userRoutes = require('./user.route');
|
const userRoutes = require('./user.route');
|
||||||
const authRoutes = require('./auth.route');
|
const authRoutes = require('./auth.route');
|
||||||
|
const empRoutes = require('./emp.route')
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
@ -16,5 +17,6 @@ router.use('/docs', express.static('docs'));
|
|||||||
|
|
||||||
router.use('/users', userRoutes);
|
router.use('/users', userRoutes);
|
||||||
router.use('/auth', authRoutes);
|
router.use('/auth', authRoutes);
|
||||||
|
router.use('/emp', empRoutes);
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
@ -6,7 +6,7 @@ const {
|
|||||||
listUsers,
|
listUsers,
|
||||||
createUser,
|
createUser,
|
||||||
replaceUser,
|
replaceUser,
|
||||||
updateUser,
|
updateUser
|
||||||
} = require('../../validations/user.validation');
|
} = require('../../validations/user.validation');
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
@ -40,7 +40,8 @@ router
|
|||||||
* @apiError (Unauthorized 401) Unauthorized Only authenticated users can access the data
|
* @apiError (Unauthorized 401) Unauthorized Only authenticated users can access the data
|
||||||
* @apiError (Forbidden 403) Forbidden Only admins can access the data
|
* @apiError (Forbidden 403) Forbidden Only admins can access the data
|
||||||
*/
|
*/
|
||||||
.get(authorize(ADMIN), validate(listUsers), controller.list)
|
.get( validate(listUsers), controller.list)
|
||||||
|
//authorize(ADMIN),
|
||||||
/**
|
/**
|
||||||
* @api {post} v1/users Create User
|
* @api {post} v1/users Create User
|
||||||
* @apiDescription Create a new user
|
* @apiDescription Create a new user
|
||||||
@ -66,8 +67,8 @@ router
|
|||||||
* @apiError (Unauthorized 401) Unauthorized Only authenticated users can create the data
|
* @apiError (Unauthorized 401) Unauthorized Only authenticated users can create the data
|
||||||
* @apiError (Forbidden 403) Forbidden Only admins can create the data
|
* @apiError (Forbidden 403) Forbidden Only admins can create the data
|
||||||
*/
|
*/
|
||||||
.post(authorize(ADMIN), validate(createUser), controller.create);
|
.post( validate(createUser), controller.create);
|
||||||
|
//authorize(ADMIN),
|
||||||
|
|
||||||
router
|
router
|
||||||
.route('/profile')
|
.route('/profile')
|
||||||
@ -89,8 +90,8 @@ router
|
|||||||
*
|
*
|
||||||
* @apiError (Unauthorized 401) Unauthorized Only authenticated Users can access the data
|
* @apiError (Unauthorized 401) Unauthorized Only authenticated Users can access the data
|
||||||
*/
|
*/
|
||||||
.get(authorize(), controller.loggedIn);
|
.get( controller.loggedIn);
|
||||||
|
//authorize(),
|
||||||
|
|
||||||
router
|
router
|
||||||
.route('/:userId')
|
.route('/:userId')
|
||||||
@ -114,7 +115,8 @@ router
|
|||||||
* @apiError (Forbidden 403) Forbidden Only user with same id or admins can access the data
|
* @apiError (Forbidden 403) Forbidden Only user with same id or admins can access the data
|
||||||
* @apiError (Not Found 404) NotFound User does not exist
|
* @apiError (Not Found 404) NotFound User does not exist
|
||||||
*/
|
*/
|
||||||
.get(authorize(LOGGED_USER), controller.get)
|
.get(controller.get)
|
||||||
|
//authorize(LOGGED_USER),
|
||||||
/**
|
/**
|
||||||
* @api {put} v1/users/:id Replace User
|
* @api {put} v1/users/:id Replace User
|
||||||
* @apiDescription Replace the whole user document with a new one
|
* @apiDescription Replace the whole user document with a new one
|
||||||
@ -189,5 +191,4 @@ router
|
|||||||
*/
|
*/
|
||||||
.delete(authorize(LOGGED_USER), controller.remove);
|
.delete(authorize(LOGGED_USER), controller.remove);
|
||||||
|
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
@ -66,4 +66,5 @@ module.exports = {
|
|||||||
resetToken: Joi.string().required(),
|
resetToken: Joi.string().required(),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
|
19
src/api/validations/emp.validation.js
Normal file
19
src/api/validations/emp.validation.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
const Joi = require('joi');
|
||||||
|
const Employee = require('../models/employee.model');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
employee : {
|
||||||
|
body: Joi.object({
|
||||||
|
fname: Joi.string()
|
||||||
|
.required()
|
||||||
|
.max(128),
|
||||||
|
lastname: Joi.string()
|
||||||
|
.required()
|
||||||
|
.max(128),
|
||||||
|
empid: Joi.string().required(),
|
||||||
|
designation: Joi.string().required(),
|
||||||
|
dateofjoining: Joi.string().required(),
|
||||||
|
user_id: Joi.required()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
const Joi = require('joi');
|
const Joi = require('joi');
|
||||||
const User = require('../models/user.model');
|
const User = require('../models/user.model');
|
||||||
|
// const Employee = require('../models/employee.model');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|
||||||
@ -48,5 +49,5 @@ module.exports = {
|
|||||||
params: {
|
params: {
|
||||||
userId: Joi.string().regex(/^[a-fA-F0-9]{24}$/).required(),
|
userId: Joi.string().regex(/^[a-fA-F0-9]{24}$/).required(),
|
||||||
},
|
},
|
||||||
},
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
|
||||||
// import .env variables
|
// import .env variables
|
||||||
require('dotenv-safe').load({
|
require('dotenv-safe').config({
|
||||||
path: path.join(__dirname, '../../.env'),
|
path: path.join(__dirname, '../../.env'),
|
||||||
sample: path.join(__dirname, '../../.env.example'),
|
sample: path.join(__dirname, '../../.env.example'),
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user