mongoose-audit-trail
Version:
Manage Mongo Collection diff History and versions
220 lines (209 loc) • 5.02 kB
JavaScript
var express = require("express");
var router = express.Router();
var Logger = require("../utils/logger.js");
var Employee = require("../models/Employee.js");
var diffHistory = require("mongoose-audit-trail");
/* GET /employees/1234 */
router.get("/:employeeId", function(req, res, next) {
Employee.find({ employeeId: req.params.employeeId }).exec(function(
err,
employeeResult
) {
if (err) {
return next(err);
}
res.json(employeeResult[0] ? employeeResult[0] : {});
});
});
/*
POST /employees
Sample Payload:
{
"name":"Saurabh",
"email":"mimani.saurabh@gmail.com",
"mobile":"123234123",
"employeeId":"934934"
}
*/
router.post("/", function(req, res, next) {
Employee.create(req.body, function(err, createOutput) {
if (err) {
return next(err);
}
res.json(createOutput);
});
});
/*
PUT /employees/update/:employeeId
Sample Payload:
{
"name":"Saurabh",
"email":"mimani.saurabh@gmail.com",
"mobile":"123234123",
"employeeId":"934934"
}
*/
router.put("/update/:employeeId", function(req, res, next) {
Employee.update(
{ employeeId: req.params.employeeId },
req.body,
{
new: true,
__user: { name: "Mimani", role: "admin" },
__reason: "Mimani updated"
},
function(errFind, updatedEmp) {
if (errFind) {
res.sendStatus(500);
return next(errFind);
}
return res.json(updatedEmp);
}
);
});
/*
PUT /employees/:employeeId
Sample Payload:
{
"name":"Saurabh",
"email":"mimani.saurabh@gmail.com",
"mobile":"123234123",
"employeeId":"934934"
}
*/
router.put("/:employeeId", function(req, res, next) {
Employee.find({ employeeId: req.params.employeeId }, function(
errFind,
postFind
) {
if (errFind) {
res.sendStatus(500);
return next(errFind);
}
if (postFind && Array.isArray(postFind) && postFind.length > 0) {
var employee = postFind[0];
for (var key in req.body) {
employee[key] = req.body[key];
}
employee.__user = "Mimani";
employee.__reason = req.body.reason
? req.body.reason
: "Mimani changed this";
employee.save(function(err) {
if (err) {
Logger.error(
"Employee update error for employeeId: " + req.params.employeeId
);
return next(err);
}
res.json(employee);
});
} else {
res.sendStatus(404);
return next("Employee Not Found");
}
});
});
/*
PUT /employees/findOneAndUpdate/:employeeId
Sample Payload:
{
"name":"Saurabh",
"email":"mimani.saurabh@gmail.com",
"mobile":"123234123",
"employeeId":"934934"
}
*/
router.put("/findOneAndUpdate/:employeeId", function(req, res, next) {
Employee.findOneAndUpdate(
{ employeeId: req.params.employeeId },
req.body,
{
new: true,
__user: "Mimani",
__reason: "Mimani updated"
},
function(errFind, updatedEmp) {
if (errFind) {
res.sendStatus(500);
return next(errFind);
}
return res.json(updatedEmp);
}
);
});
router.get("/:employeeId/version/:version", function(req, res, next) {
Employee.find({ employeeId: req.params.employeeId }).exec(function(
err,
employeeResult
) {
if (err || !employeeResult || !employeeResult[0]) {
return next(err);
}
diffHistory.getVersion(
Employee,
employeeResult[0]._id,
req.params.version,
function(err, oldEmployee) {
if (err) {
return next(err);
}
res.json(oldEmployee);
}
);
});
});
router.get("/:id/versionbyObjectId/:version", function(req, res, next) {
diffHistory.getVersion(Employee, req.params.id, req.params.version, function(
err,
oldEmployee
) {
if (err) {
return next(err);
}
res.json(oldEmployee);
});
});
router.get("/:employeeId/histories", function(req, res, next) {
Employee.find({ employeeId: req.params.employeeId }).exec(function(
err,
employeeResult
) {
if (err || !employeeResult || !employeeResult[0]) {
return next(err);
}
diffHistory.getHistories(
"Employee",
employeeResult[0]._id,
["mobile"],
function(err, histories) {
if (err) {
return next(err);
}
res.json(histories);
}
);
});
});
/* DELETE /employees/:employeeId */
router.delete("/:employeeId", function(req, res, next) {
Employee.findOne({ employeeId: req.params.employeeId }, function(
err,
employee
) {
if (err || !employee) {
return next(err);
}
employee.remove(function(err) {
if (err) {
return next(err);
}
var response = {
employeeId: req.params.employeeId,
entryDeleted: true
};
res.json(response);
});
});
});
module.exports = router;