feat: crud endpoints for user-roles

This commit is contained in:
Sathishkumar Krishnan
2021-12-23 23:00:16 +05:30
parent 8f4cc159b4
commit 0015666249
2 changed files with 75 additions and 7 deletions

View File

@@ -1,7 +1,75 @@
module.exports = {
getAllRoles: async (req, res, next) => {},
getRole: async (req, res, next) => {},
createRole: async (req, res, next) => {},
updateRole: async (req, res, next) => {},
deleteRole: async (req, res, next) => {},
const mongoose = require("mongoose");
const UserRole = require("../models/UserRole");
const UserPermission = require("../models/UserPermission");
const getValidPermissions = async (permissions) => {
const verifiedPermissions = permissions.filter((permission) =>
mongoose.isValidObjectId(permission)
);
const permissionObjects = await UserPermission.find({
id: { in: verifiedPermissions },
}).select({ _id: 1 });
return permissionObjects.map((_) => _._id);
};
module.exports = {
getAllRoles: async (req, res, next) => {
let { page, perPage } = req.query;
page = page || 0;
perPage = perPage || 10;
const result = await UserRole.find(
{},
{
id: 1,
name: 1,
permissions: 1,
},
{ skip: page * perPage, limit: perPage }
);
res.send({ success: true, data: result });
},
getRole: async (req, res, next) => {
try {
const { id } = req.params;
if (mongoose.isValidObjectId(id)) {
const role = await UserRole.findById(id);
res.send({ success: true, data: role });
} else {
throw new Error(`invalid data format for object-id - ${id}`);
}
} catch (e) {
next(e);
}
},
createRole: async (req, res, next) => {
try {
const { name, permissions } = req.body;
const verifiedPermissions = getValidPermissions(permissions);
const newUserRole = await UserRole.create({
name,
permissions: verifiedPermissions,
});
res.send({ success: true, data: newUserRole });
} catch (e) {
next(e);
}
},
updateRole: async (req, res, next) => {
// Need more clarity
res.send({ success: false, error: "not implemented" });
},
deleteRole: async (req, res, next) => {
try {
const { id } = req.params;
if (mongoose.isValidObjectId(id)) {
const result = await UserRole.deleteOne({ _id: id });
res.send({ success: true, data: result });
} else {
throw new Error(`invalid data format for object-id - ${id}`);
}
} catch (e) {
next(e);
}
},
};