diff --git a/src/controller/userRole.controller.js b/src/controller/userRole.controller.js index 6321e3f..0352924 100644 --- a/src/controller/userRole.controller.js +++ b/src/controller/userRole.controller.js @@ -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); + } + }, }; diff --git a/src/controller/userRole.router.js b/src/controller/userRole.router.js index b5bc846..0a1f210 100644 --- a/src/controller/userRole.router.js +++ b/src/controller/userRole.router.js @@ -4,7 +4,7 @@ const controller = require("./userRole.controller"); router.get("/all", controller.getAllRoles); router.get("/:id", controller.getRole); router.post("/create", controller.createRole); -router.patch("/:id", controller.updateRole); +router.post("/:id", controller.updateRole); router.delete("/:id", controller.deleteRole); module.exports = router;