Skip to content

Commit

Permalink
Merge pull request #110 from Cavdy/ft-admin-and-staffs-can-view-users…
Browse files Browse the repository at this point in the history
…-165661767

#165661767 Admin and staffs can view users
  • Loading branch information
Cavdy committed Apr 28, 2019
2 parents 5ac1c43 + 5bb55ce commit 81af082
Show file tree
Hide file tree
Showing 7 changed files with 209 additions and 95 deletions.
11 changes: 9 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,15 @@ cache:
- "node_modules"
env:
global:
- CODECLIMATE_REPO_TOKEN=c14abfc89b0eb06fcb10f480f4b3e47142ac181c60c21f0131b570e72b1fbeb7
- CC_TEST_REPORTER_ID=c14abfc89b0eb06fcb10f480f4b3e47142ac181c60c21f0131b570e72b1fbeb7
before_script:
- npm install -g nyc
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
- chmod +x ./cc-test-reporter
- ./cc-test-reporter before-build
script:
- npm run test
- - nyc --reporter=lcov npm run test
after_script:
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
services:
- postgresql
42 changes: 42 additions & 0 deletions frontend-app/js/profile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
const api = 'https://bankaapp-api.herokuapp.com/api/v1';
const token = sessionStorage.getItem('token');
const id = sessionStorage.getItem('id');
const profileSection = document.querySelector('.profile-section');
const firstname = document.querySelector('.firstname');
const lastname = document.querySelector('.lastname');
const email = document.querySelector('.email');
const type = document.querySelector('.type');
const admin = document.querySelector('.admin');

// GET FETCH API REQUEST TO GET A PARTICULAR ACCOUNT INFO
const getAccountApi = (url) => {
fetch(url, {
method: 'GET',
mode: 'cors',
cache: 'no-cache',
credentials: 'same-origin',
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
redirect: 'follow',
referrer: 'no-referrer',
})
.then((response) => {
if (response.status === 403) {
profileSection.style.display = 'none';
}
profileSection.style.display = 'flex';
return response.json();
})
.then((data1) => {
const i = data1.data;
firstname.innerHTML = i.firstname;
lastname.innerHTML = i.lastname;
email.innerHTML = i.email;
type.innerHTML = i.type;
admin.innerHTML = i.isadmin;
});
};

getAccountApi(`${api}/users/${id}`);
4 changes: 0 additions & 4 deletions frontend-app/js/transactions.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,6 @@ const getTransactionsApi = (url) => {
.then(() => {
// modal
const showModal = document.querySelectorAll('#show-modal');
// const accountName = document.querySelectorAll('#username');
// const accountNumber = document.querySelectorAll('#acnumber');
// const accountBalance = document.querySelectorAll('#balance');

const modalFunction = (modalClick, modalIn, modalId) => {
if (modalClick) {
const mModal = document.querySelector(modalIn);
Expand Down
73 changes: 48 additions & 25 deletions frontend-app/js/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ const api = 'https://bankaapp-api.herokuapp.com/api';
const limitSelect = document.querySelector('#limit');
const submit = document.querySelector('#go');
const errMsg = document.querySelector('.errMsg');
const successMsg = document.querySelector('.successMsg');
const userTable = document.querySelector('.user-table');
const queryForm = document.querySelector('.queryForm');

// DELETE FETCH REQUEST FOR USERS
const deleteApi = (url) => {
Expand Down Expand Up @@ -49,59 +52,79 @@ const getUsersApi = (url) => {
})
.then((response) => {
if (response.status === 403) {
errMsg.innerHTML = 'you must be logged in to view accounts';
errMsg.parentElement.style.display = 'flex';
userTable.style.display = 'none';
queryForm.style.display = 'none';
errMsg.innerHTML = 'you must be logged in to view users';
} else {
userTable.style.display = 'block';
queryForm.style.display = 'flex';
errMsg.parentElement.style.display = 'none';
errMsg.innerHTML = '';
return response.json();
}
})
.then((data1) => {
if (data1.status === 401) {
errMsg.parentElement.style.display = 'flex';
userTable.style.display = 'none';
queryForm.style.display = 'none';
errMsg.innerHTML = 'you must be an admin or staff to view accounts';
} else {
userTable.style.display = 'block';
queryForm.style.display = 'flex';
errMsg.parentElement.style.display = 'none';
data1.data.map((i) => {
const table = document.querySelector('.table');
const tableRow = document.createElement('div');
tableRow.classList = 'table-row table-body';
const transactionId = document.createElement('div');
transactionId.className = 'none';
transactionId.innerHTML = i.id;
const createdOn = document.createElement('div');
createdOn.className = 'account-name';
createdOn.innerHTML = i.createdon;
const accountNumber = document.createElement('div');
accountNumber.className = 'account-index';
accountNumber.innerHTML = i.accountnumber;
const userId = document.createElement('div');
userId.className = 'none';
userId.innerHTML = i.id;
const fullname = document.createElement('div');
fullname.className = 'account-index';
fullname.innerHTML = `${i.firstname} ${i.lastname}`;
const email = document.createElement('div');
email.className = 'account-name';
email.innerHTML = i.email;
const type = document.createElement('div');
type.className = 'account-status';
type.innerHTML = i.type;
const record = document.createElement('div');
record.className = 'record';
const aRecord = document.createElement('a');
aRecord.href = '#';
aRecord.className = 'record-btn';
aRecord.id = 'show-modal';
aRecord.innerHTML = 'View Record';
record.appendChild(aRecord);
const isAdmin = document.createElement('div');
isAdmin.className = 'activate';
isAdmin.innerHTML = i.isadmin;
const deleteUser = document.createElement('div');
deleteUser.className = 'deactivate';
const aDeleteUser = document.createElement('a');
aDeleteUser.href = '#';
aDeleteUser.className = 'delete-btn';
aDeleteUser.id = 'delete';
aDeleteUser.innerHTML = 'Delete';
deleteUser.appendChild(aDeleteUser);
const newBalnace = document.createElement('div');
newBalnace.className = 'account-status';
newBalnace.innerHTML = i.newbalance;
tableRow.appendChild(transactionId);
tableRow.appendChild(createdOn);
tableRow.appendChild(accountNumber);
tableRow.appendChild(userId);
tableRow.appendChild(fullname);
tableRow.appendChild(email);
tableRow.appendChild(type);
tableRow.appendChild(record);
tableRow.appendChild(newBalnace);
tableRow.appendChild(isAdmin);
tableRow.appendChild(deleteUser);
table.appendChild(tableRow);
});

// DELETE
const dels = document.querySelectorAll('.deactivate-btn');
const dels = document.querySelectorAll('.delete-btn');
dels.forEach((del) => {
del.addEventListener('click', (e) => {
const id = e.target.parentElement.parentElement.children[0].innerHTML;
deleteApi(`${api}/v1/users/${id}`);
e.target.parentElement.parentElement.remove();
successMsg.parentElement.style.display = 'flex';
successMsg.innerHTML = 'User successfully deleted';
setInterval(() => {
location.reload(true);
}, 3000);
});
});
}
Expand All @@ -117,5 +140,5 @@ submit.addEventListener('click', (e) => {
tableBody.remove();
});

getTransactionsApi(`${api}/v1/accounts/${accountSelect.value}/transactions`);
getUsersApi(`${api}/v1/users/clients?limit=${limitSelect.value}`);
});
52 changes: 52 additions & 0 deletions frontend-app/profile.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Profile - Banka App</title>
<link rel="stylesheet" href="./css/style.css">

</head>

<body class="body">
<div class="profile-container">
<div class="profile">
<div class="profile-menu">
<a href="./dashboard.html" class="goback">
<svg class="goback-icon">
<use xlink:href="./svg/sprite.svg#icon-arrow-left2"></use>
</svg></a></a>
<a href="#" class="edit-profile">Edit</a>
</div>
<div class="profile-section">
<div class="left-profile-section">
<img src="./img/js2.png" alt="" class="profile-img">
</div>
<div class="right-profile-section">
<h1>User Profile</h1>
<div class="name">
<strong>First Name:</strong> <br>
<span class="firstname"></span></div>
<div class="name">
<strong>Last Name:</strong> <br>
<span class="lastname"></span></div>
<div class="name">
<strong>Email:</strong> <br>
<span class="email"></span></div>
<div class="name">
<strong>Type:</strong> <br>
<span class="type"></span></div>
<div class="name">
<strong>Admin:</strong> <br>
<span class="admin"></span></div>
</div>
</div>
</div>
</div>
</div>
<script src="./js/profile.js"></script>
</body>

</html>
114 changes: 54 additions & 60 deletions frontend-app/users.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,32 +21,32 @@
<h1 class="logo">Banka</h1>
</div>
<div class="sidebar-menu">
<ul class="sidebar-list">
<li class="sidebar-item">
<a href="./dashboard.html" class="sidebar-link">Dashboard</a>
</li>
<li class="sidebar-item">
<a href="./createaccount.html" class="sidebar-link">Create an account</a>
</li>
<li class="sidebar-item">
<a href="./accounts.html" class="sidebar-link">Credit / Debit</a>
</li>
<li class="sidebar-item">
<a href="./transactions.html" class="sidebar-link">Transactions</a>
</li>
<li class="sidebar-item sidebar-item-active">
<a href="./users.html" class="sidebar-link">Users</a>
</li>
<li class="sidebar-item">
<a href="staffs.html" class="sidebar-link">Staffs</a>
</li>
<li class="sidebar-item">
<a href="./adduser.html" class="sidebar-link">Create Staffs</a>
</li>
<li class="sidebar-item">
<a href="./activate.html" class="sidebar-link">Activate / Deactivate</a>
</li>
</ul>
<ul class="sidebar-list">
<li class="sidebar-item">
<a href="./dashboard.html" class="sidebar-link">Dashboard</a>
</li>
<li class="sidebar-item">
<a href="./createaccount.html" class="sidebar-link">Create an account</a>
</li>
<li class="sidebar-item">
<a href="./accounts.html" class="sidebar-link">Credit / Debit</a>
</li>
<li class="sidebar-item">
<a href="./transactions.html" class="sidebar-link">Transactions</a>
</li>
<li class="sidebar-item sidebar-item-active">
<a href="./users.html" class="sidebar-link">Users</a>
</li>
<li class="sidebar-item">
<a href="staffs.html" class="sidebar-link">Staffs</a>
</li>
<li class="sidebar-item">
<a href="./adduser.html" class="sidebar-link">Create Staffs</a>
</li>
<li class="sidebar-item">
<a href="./activate.html" class="sidebar-link">Activate / Deactivate</a>
</li>
</ul>
</div>
<div class="sidebar-legal">
&copy; 2019 Banka. All Rights Reserved.
Expand Down Expand Up @@ -126,44 +126,38 @@ <h1 class="logo">Banka</h1>

<!--Main Body-->
<main class="main-body">
<div class="card">
<div class="alert alert-success"><span class="successMsg">Success </span><span id="close">X</span></div>
<div class="alert alert-danger"><span class="errMsg">Something went wrong. Try again </span><span
id="close">X</span></div>
<!--Accounts Limit-->
<div class="accountsQuery">
<div class="queryForm">
<div class="card">
<form action="" class="accounts-form">
<div class="form-group">
<select class="accounts-select" id="limit">
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
</select>
</div>

<input type="submit" id="go" class="btn-go" value="Go">
</form>
</div>
</div>
</div>
<div class="card user-table">
<h1 class="content-title">Users Accounts</h1>

<div class="table">
<div class="table-row">
<div class="account-index">Index</div>
<div class="account-name">Account Name</div>
<div class="account-number">Account Number</div>
<div class="record">Number of Account</div>
<div class="delete">Delete</div>
</div>
<div class="table-row">
<div class="account-index">1</div>
<div class="account-name">Fred Matthew</div>
<div class="account-number">67358929653</div>
<div class="record"><a href="#" class="record-btn" id="show-modal">View Record</a></div>
<div class="delete"><a href="#" class="delete-btn" id="delete">Delete</a></div>
</div>
<div class="table-row">
<div class="account-index">2</div>
<div class="account-name">Jade Smith</div>
<div class="account-number">86436442678</div>
<div class="record"><a href="#" class="record-btn" id="show-modal">View Record</a></div>
<div class="delete"><a href="#" class="delete-btn" id="delete">Delete</a></div>
</div>
<div class="table-row">
<div class="account-index">3</div>
<div class="account-name">Black widow</div>
<div class="account-number">67358929653</div>
<div class="record"><a href="#" class="record-btn" id="show-modal">View Record</a></div>
<div class="delete"><a href="#" class="delete-btn" id="delete">Delete</a></div>
</div>
<div class="table-row">
<div class="account-index">4</div>
<div class="account-name">Love heart</div>
<div class="account-number">86436442678</div>
<div class="record"><a href="#" class="record-btn" id="show-modal">View Record</a></div>
<div class="delete"><a href="#" class="delete-btn" id="delete">Delete</a></div>
<div class="account-index">Name</div>
<div class="account-name">Email</div>
<div class="account-status">Type</div>
<div class="activate">IsAdmin</div>
<div class="deactivate">Delete</div>
</div>
</div>
</div>
Expand Down
8 changes: 4 additions & 4 deletions server/v1/services/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,14 +97,14 @@ const UsersServices = {
if (type === 'staff' || isadmin === true) {
if (typeof queryLimit !== 'undefined') {
const allAccounts = await dbConnection
.dbConnect('SELECT * from users WHERE type=$1 LIMIT $2',
['client', queryLimit]);
.dbConnect('SELECT * from users WHERE type=$1, isadmin=$2 LIMIT $3',
['client', false, queryLimit]);
returnStatus = 200;
returnSuccess = allAccounts.rows;
} else {
const allAccounts = await dbConnection
.dbConnect('SELECT * from users WHERE type=$1 LIMIT $2',
['client', 10]);
.dbConnect('SELECT * from users WHERE type=$1, isadmin=$2 LIMIT $3',
['client', false, 10]);
returnStatus = 200;
returnSuccess = allAccounts.rows;
}
Expand Down

0 comments on commit 81af082

Please sign in to comment.