Browse Source

create, update, delete and get employee

features/employee
sg-dev-team 3 years ago
parent
commit
40a542a7e6
13 changed files with 169 additions and 27 deletions
  1. +2
    -2
      .env.example
  2. +60
    -0
      src/api/controllers/emp.controller.js
  3. +14
    -13
      src/api/controllers/user.controller.js
  4. +35
    -0
      src/api/models/employee.model.js
  5. +7
    -1
      src/api/models/user.model.js
  6. +0
    -1
      src/api/routes/v1/auth.route.js
  7. +17
    -0
      src/api/routes/v1/emp.route.js
  8. +2
    -0
      src/api/routes/v1/index.js
  9. +9
    -8
      src/api/routes/v1/user.route.js
  10. +1
    -0
      src/api/validations/auth.validation.js
  11. +19
    -0
      src/api/validations/emp.validation.js
  12. +2
    -1
      src/api/validations/user.validation.js
  13. +1
    -1
      src/config/vars.js

+ 2
- 2
.env.example View File

@ -5,6 +5,6 @@ EMAIL_USERNAME=krish@sentientgeeks.com
EMAIL_PASSWORD=123456
NODE_ENV=development
PORT=3000
MONGO_URI_TESTS=mongodb://mongodb:27017/sg-node-express-rest-api
MONGO_URI=mongodb://mongodb:27017/sg-node-express-rest-api
MONGO_URI_TESTS=mongodb://localhost:27017/sg-node-express-rest-api
MONGO_URI=mongodb://localhost:27017/sg-node-express-rest-api
JWT_EXPIRATION_MINUTES=300

+ 60
- 0
src/api/controllers/emp.controller.js View 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);
};

+ 14
- 13
src/api/controllers/user.controller.js View File

@ -1,6 +1,6 @@
const httpStatus = require('http-status');
const { omit } = require('lodash');
const User = require('../models/user.model');
const httpStatus = require("http-status");
const { omit } = require("lodash");
const User = require("../models/user.model");
/**
* Load user and append to req.
@ -51,10 +51,9 @@ exports.replace = async (req, res, next) => {
try {
const { user } = req.locals;
const newUser = new User(req.body);
const ommitRole = user.role !== 'admin' ? 'role' : '';
const newUserObject = omit(newUser.toObject(), '_id', ommitRole);
const ommitRole = user.role !== "admin" ? "role" : "";
const newUserObject = omit(newUser.toObject(), "_id", ommitRole);
res.json(savedUser.transform());
} catch (error) {
next(User.checkDuplicateEmail(error));
@ -66,13 +65,14 @@ exports.replace = async (req, res, next) => {
* @public
*/
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 user = Object.assign(req.locals.user, updatedUser);
user.save()
.then(savedUser => res.json(savedUser.transform()))
.catch(e => next(User.checkDuplicateEmail(e)));
user
.save()
.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) => {
try {
const users = await User.list(req.query);
const transformedUsers = users.map(user => user.transform());
const transformedUsers = users.map((user) => user.transform());
res.json(transformedUsers);
} catch (error) {
next(error);
@ -96,7 +96,8 @@ exports.list = async (req, res, next) => {
exports.remove = (req, res, next) => {
const { user } = req.locals;
user.remove()
user
.remove()
.then(() => res.status(httpStatus.NO_CONTENT).end())
.catch(e => next(e));
.catch((e) => next(e));
};

+ 35
- 0
src/api/models/employee.model.js View 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);

+ 7
- 1
src/api/models/user.model.js View File

@ -4,7 +4,8 @@ const { omitBy, isNil } = require('lodash');
const bcrypt = require('bcryptjs');
const moment = require('moment-timezone');
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 { env, jwtSecret, jwtExpirationInterval } = require('../../config/vars');
@ -55,6 +56,11 @@ const userSchema = new mongoose.Schema({
timestamps: true,
});
userSchema.virtual('employee', {
ref: 'employee',
localField: '_id',
foreignField: 'user_id'
})
/**
* Add your
* - pre-save hooks


+ 0
- 1
src/api/routes/v1/auth.route.js View File

@ -43,7 +43,6 @@ const router = express.Router();
router.route('/register')
.post(validate(register), controller.register);
/**
* @api {post} v1/auth/login Login
* @apiDescription Get an accessToken


+ 17
- 0
src/api/routes/v1/emp.route.js View 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;

+ 2
- 0
src/api/routes/v1/index.js View File

@ -1,6 +1,7 @@
const express = require('express');
const userRoutes = require('./user.route');
const authRoutes = require('./auth.route');
const empRoutes = require('./emp.route')
const router = express.Router();
@ -16,5 +17,6 @@ router.use('/docs', express.static('docs'));
router.use('/users', userRoutes);
router.use('/auth', authRoutes);
router.use('/emp', empRoutes);
module.exports = router;

+ 9
- 8
src/api/routes/v1/user.route.js View File

@ -6,7 +6,7 @@ const {
listUsers,
createUser,
replaceUser,
updateUser,
updateUser
} = require('../../validations/user.validation');
const router = express.Router();
@ -40,7 +40,8 @@ router
* @apiError (Unauthorized 401) Unauthorized Only authenticated users 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
* @apiDescription Create a new user
@ -66,8 +67,8 @@ router
* @apiError (Unauthorized 401) Unauthorized Only authenticated users 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
.route('/profile')
@ -89,8 +90,8 @@ router
*
* @apiError (Unauthorized 401) Unauthorized Only authenticated Users can access the data
*/
.get(authorize(), controller.loggedIn);
.get( controller.loggedIn);
//authorize(),
router
.route('/:userId')
@ -114,7 +115,8 @@ router
* @apiError (Forbidden 403) Forbidden Only user with same id or admins can access the data
* @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
* @apiDescription Replace the whole user document with a new one
@ -189,5 +191,4 @@ router
*/
.delete(authorize(LOGGED_USER), controller.remove);
module.exports = router;

+ 1
- 0
src/api/validations/auth.validation.js View File

@ -66,4 +66,5 @@ module.exports = {
resetToken: Joi.string().required(),
}),
},
};

+ 19
- 0
src/api/validations/emp.validation.js View 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()
})
}
}

+ 2
- 1
src/api/validations/user.validation.js View File

@ -1,5 +1,6 @@
const Joi = require('joi');
const User = require('../models/user.model');
// const Employee = require('../models/employee.model');
module.exports = {
@ -48,5 +49,5 @@ module.exports = {
params: {
userId: Joi.string().regex(/^[a-fA-F0-9]{24}$/).required(),
},
},
}
};

+ 1
- 1
src/config/vars.js View File

@ -1,7 +1,7 @@
const path = require('path');
// import .env variables
require('dotenv-safe').load({
require('dotenv-safe').config({
path: path.join(__dirname, '../../.env'),
sample: path.join(__dirname, '../../.env.example'),
});


Loading…
Cancel
Save