Skip to content

Commit

Permalink
Merge 429493e into 79d7c6a
Browse files Browse the repository at this point in the history
  • Loading branch information
dieudonneAwa committed Sep 9, 2019
2 parents 79d7c6a + 429493e commit 0a6620e
Show file tree
Hide file tree
Showing 24 changed files with 1,047 additions and 80 deletions.
3 changes: 1 addition & 2 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,10 @@
"one-var-declaration-per-line": 0,
"new-cap": 0,
"consistent-return": 0,
"linebreak-style": 0,
"no-param-reassign": 0,
"no-trailing-spaces": 0,
"comma-dangle": 0,
"linebreak-style": 0,
"arrow-parens": 0,
"curly": ["error", "multi-line"],
"import/no-unresolved": [2, { "commonjs": true }],
"no-shadow": ["error", { "allow": ["req", "res", "err"] }],
Expand Down
41 changes: 11 additions & 30 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 7 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,29 +36,30 @@
"uuid": "^3.3.3"
},
"devDependencies": {
"cors": "^2.8.4",
"cross-env": "^5.2.0",
"@babel/plugin-transform-regenerator": "^7.4.5",
"@babel/cli": "^7.5.5",
"@babel/core": "^7.5.5",
"@babel/node": "^7.5.5",
"@babel/plugin-transform-regenerator": "^7.4.5",
"@babel/plugin-transform-runtime": "^7.4.4",
"@babel/runtime": "^7.4.5",
"@babel/polyfill": "^7.4.4",
"@babel/preset-env": "^7.5.5",
"@babel/register": "^7.5.5",
"@babel/runtime": "^7.4.5",
"babel-eslint": "^10.0.2",
"chai": "^4.2.0",
"chai-http": "^4.3.0",
"cors": "^2.8.4",
"coveralls": "^3.0.6",
"cross-env": "^5.2.0",
"eslint": "^5.16.0",
"eslint-config-airbnb-base": "^14.0.0",
"eslint-plugin-import": "^2.18.2",
"eslint-plugin-react": "^7.14.3",
"mocha": "^6.2.0",
"nodemon": "^1.19.1",
"nyc": "^14.1.1",
"sinon": "^7.4.1",
"sinon-chai": "^3.3.0",
"nyc": "^14.1.1"
"sinon-chai": "^3.3.0"
},
"nyc": {
"exclude": [
Expand Down
113 changes: 113 additions & 0 deletions src/controllers/AdminController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
/* eslint-disable class-methods-use-this */
import UserRepository from '../repositories/UserRepository';
import { sendSuccessResponse, sendErrorResponse, successResponse } from '../utils/sendResponse';
import { inValidEmail } from '../modules/validator';

/**
* @module AdminController
* @description Controls admin based activities
*/
class AdminController {
/**
* @description Assign roles to users
*
* @param {*} req - Request Object
*
* @param {*} res - Response Object
*
* @returns {object} - returns a response object
*
* @memberof AdminController
*/
async assignRole(req, res) {
const { email, role } = req.body;
try {
if (!inValidEmail(email)) {
const roles = await UserRepository.getRoles();
if (!roles.includes(role)) return sendErrorResponse(res, 400, `${role} role does not exist`);
const updatedUser = await UserRepository.setRole(email, role);
if (!updatedUser) return sendErrorResponse(res, 404, `User with email ${email} not found`);
return successResponse(res, 200, `New role assigned to ${email}`);
}
} catch (error) {
throw new Error(error);
}
}

/**
* @description gets a list of all users
*
* @param {object} req - request object
*
* @param {object} res - response object
*
* @returns {object} returns a response object
*
* @memberof AdminController
*/
async getUsers(req, res) {
const users = await UserRepository.getAll();
if (!users) return sendErrorResponse(res, 404, 'No user found');
const usersInfo = users.map(user => {
const userInfo = {
name: user.name,
email: user.email,
is_verified: user.is_verified,
role: user.role
};
return userInfo;
});
return sendSuccessResponse(res, 200, usersInfo);
}

/**
* @description gets a user by uuid
*
* @param {object} req request object
*
* @param {object} res response object
*
* @returns {object} returns a response containing the user object
*
* @memberof AdminController
*/
async getUser(req, res) {
const { email } = req.params;
const user = await UserRepository.getOne({ email });
if (!user) return sendErrorResponse(res, 404, 'User not found');
const userInfo = {
name: user.name,
email: user.email,
is_verified: user.is_verified,
role: user.role
};
return sendSuccessResponse(res, 200, userInfo);
}

/**
* @description assigns permissions to role
*
* @param {object} req request object
*
* @param {object} res response object
*
* @returns {object} returns a response containing the user object
*
* @memberof AdminController
*/
async assignPermission(req, res) {
const { role, permission } = req.body;
try {
const roles = await UserRepository.getRoles();
const permissions = await UserRepository.getPermissions();
if (!permissions.includes(permission)) return sendErrorResponse(res, 400, `${permission} permission does not exist`);
if (!roles.includes(role)) return sendErrorResponse(res, 400, `${role} role does not exist`);
await UserRepository.setPermission(role, permission);
return successResponse(res, 200, `${permission} permission assigned to ${role} successfully`);
} catch (error) {
return sendErrorResponse(res, 500, 'Unable to assign permission');
}
}
}

export default new AdminController();
Loading

0 comments on commit 0a6620e

Please sign in to comment.