Skip to content

Commit bc75838

Browse files
Andela DeveloperAndela Developer
authored andcommitted
merge feedback
2 parents 8568f9a + 296b228 commit bc75838

16 files changed

Lines changed: 364 additions & 192 deletions

File tree

server/config/config.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,7 @@ module.exports = {
1010
dialect: 'postgres'
1111
},
1212
test: {
13-
username: 'andeladeveloper',
14-
password: null,
15-
database: 'docmanager-test',
16-
host: '127.0.0.1',
17-
port: 5432,
18-
dialect: 'postgres'
13+
use_env_variable: 'TEST_DB'
1914
},
2015
production: {
2116
use_env_variable: 'PRODUCTION_DB',

server/controllers/documents.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import helper from '../helpers/helper';
1+
import helper from '../helpers/pagination';
22
import models from '../models';
33

44
const User = models.User;
@@ -174,21 +174,21 @@ const findDocument = (req, res) => {
174174
res.status(404).json({ message: 'Document not found' });
175175
}
176176
if (req.decoded.roleId === 1) {
177-
return document;
177+
return res.status(200).send({ document });
178178
}
179179
if (document.access === 'public') {
180-
return res.status(200).send(document);
180+
return res.status(200).send({ document });
181181
}
182182
if (document.access === 'private') {
183183
if (document.userId !== req.decoded.id) {
184184
return res.status(403).json({
185185
message: 'You are not authorized to view this document'
186186
});
187187
}
188-
return res.status(200).send(document);
188+
return res.status(200).send({ document });
189189
}
190190
if (document.access === 'role') {
191-
return models.User
191+
return User
192192
.findById(document.userId)
193193
.then((documentOwner) => {
194194
if (
@@ -198,7 +198,7 @@ const findDocument = (req, res) => {
198198
message: 'You are not authorized to view this document'
199199
});
200200
}
201-
return res.status(200).send(document);
201+
return res.status(200).send({ document });
202202
})
203203
.catch(error => res.status(400).send(error));
204204
}
@@ -240,7 +240,7 @@ const deleteDocument = (req, res) => {
240240
.catch(error => res.status(400).send(error));
241241
};
242242

243-
export default {
243+
module.exports = {
244244
createDocument,
245245
updateDocument,
246246
getAllDocument,

server/controllers/roles.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const Role = models.Role;
88
* @param {object} res - new created role
99
* @returns {object} - newly created role
1010
*/
11-
function createRole(req, res) {
11+
const createRole = (req, res) => {
1212
req.check('title', 'Title is required').notEmpty();
1313

1414
const errors = req.validationErrors();
@@ -32,28 +32,28 @@ function createRole(req, res) {
3232
}
3333
}).catch(error => res.json(error));
3434
}
35-
}
35+
};
3636

3737
/**
3838
* Get all roles.
3939
* @param {void} req - no request body attached
4040
* @param {array} res - an array of roles and their id
4141
* @returns {array} array of roles
4242
*/
43-
function getRoles(req, res) {
44-
return Role
43+
const getRoles = (req, res) => {
44+
Role
4545
.findAll()
4646
.then(roles => res.status(200).json({ roles }))
4747
.catch(error => res.json(error));
48-
}
48+
};
4949

5050
/**
5151
* Find roles by Id.
5252
* @param {number} req - requested role
5353
* @param {object} res - role found by id
5454
* @returns {object} - role found by id
5555
*/
56-
function findRole(req, res) {
56+
const findRole = (req, res) => {
5757
if (isNaN(req.params.id)) {
5858
res.status(403).json({
5959
message: `invalid input syntax for integer: "${req.params.id}"`
@@ -72,15 +72,15 @@ function findRole(req, res) {
7272
message: 'out of range for type integer'
7373
}));
7474
}
75-
}
75+
};
7676

7777
/**
7878
* Update role.
7979
* @param {number} req - requested role by id
8080
* @param {object} res - updated role
8181
* @returns {object} - updated role status
8282
*/
83-
function updateRole(req, res) {
83+
const updateRole = (req, res) => {
8484
if (req.decoded.roleId !== 1) {
8585
return res.status(401)
8686
.json({ message: 'You are not authorized' });
@@ -105,15 +105,15 @@ function updateRole(req, res) {
105105
}).catch(() => res.status(400).json({
106106
message: 'out of range for type integer'
107107
}));
108-
}
108+
};
109109

110110
/**
111111
* Delete roles by Id.
112112
* @param {number} req - role to be deleted by id
113113
* @param {object} res - deleted role
114114
* @returns {object} - message
115115
*/
116-
function deleteRole(req, res) {
116+
const deleteRole = (req, res) => {
117117
if (req.decoded.roleId !== 1) {
118118
return res.status(401)
119119
.json({ message: 'You are not authorized' });
@@ -134,6 +134,6 @@ function deleteRole(req, res) {
134134
}).catch(() => res.status(400).json({
135135
message: 'out of range for type integer'
136136
}));
137-
}
137+
};
138138

139-
export default { createRole, getRoles, findRole, updateRole, deleteRole };
139+
module.exports = { createRole, getRoles, findRole, updateRole, deleteRole };

server/controllers/search.js

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import helper from '../helpers/helper';
1+
import helper from '../helpers/pagination';
22
import models from '../models';
33

44
const Document = models.Document;
@@ -40,7 +40,7 @@ const searchUser = (req, res) => {
4040
pagination: pagination(count, limit, offset)
4141
});
4242
}).catch(error => res.status(400).send(error));
43-
}
43+
};
4444

4545
/**
4646
*
@@ -50,26 +50,25 @@ const searchUser = (req, res) => {
5050
* @returns {array} - searched document
5151
*/
5252
const searchDocuments = (req, res) => {
53-
const searchQuery = [];
5453
const limit = req.query.limit || 6,
5554
offset = req.query.offset || 0,
5655
queryString = req.query.q.replace(/ +(?= )/g, ''),
57-
splitString = queryString.trim().split(' ');
58-
59-
splitString.forEach((query) => {
60-
const output = { $iLike: `%${query}%` };
61-
searchQuery.push(output);
62-
});
63-
64-
console.log(splitString);
56+
searchQuery = [];
6557

66-
if (!splitString) {
58+
if (!queryString) {
6759
return res.status(400).json({
6860
message: 'Invalid search input'
6961
});
7062
}
7163

7264
if (req.decoded.roleId === 1) {
65+
const splitString = queryString.trim().split(' ');
66+
67+
splitString.forEach((query) => {
68+
const output = { $iLike: `%${query}%` };
69+
searchQuery.push(output);
70+
});
71+
7372
return Document.findAndCountAll({
7473
limit,
7574
offset,
@@ -135,4 +134,4 @@ const searchDocuments = (req, res) => {
135134
}
136135
};
137136

138-
export default { searchUser, searchDocuments };
137+
module.exports = { searchUser, searchDocuments };

server/controllers/users.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import bcrypt from 'bcrypt';
22
import jwt from 'jsonwebtoken';
33

4-
import helper from '../helpers/helper';
4+
import helper from '../helpers/pagination';
55
import models from '../models';
66

77
require('dotenv').config();
@@ -88,7 +88,6 @@ const createUser = (req, res) => {
8888
* @param {object} res - authenicated user details
8989
* @returns {object} - an object of the logged in user and a token
9090
*/
91-
9291
const login = (req, res) => {
9392
req.check('email', 'Email is required').notEmpty();
9493
req.check('email', 'Please put a valid email').isEmail();
@@ -144,7 +143,7 @@ const findUser = (req, res) => {
144143
const userQuery = Number(req.params.id);
145144
if (isNaN(userQuery)) {
146145
return res.status(400).json({
147-
message: `invalid input syntax for integer: "${req.params.id}"`
146+
message: `invalid input syntax for integer: ${req.params.id}`
148147
});
149148
}
150149
if ((req.decoded.id !== userQuery) && (req.decoded.roleId !== 1)) {
@@ -278,7 +277,7 @@ const getUserDocuments = (req, res) => {
278277
.catch(error => res.status(400).send(error));
279278
};
280279

281-
export default {
280+
module.exports = {
282281
getUsers,
283282
createUser,
284283
login,

server/middlewares/auth.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,4 @@ const adminAccess = (req, res, next) => {
4747
}
4848
};
4949

50-
export default { verifyToken, adminAccess };
50+
module.exports = { verifyToken, adminAccess };

server/models/document.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,35 @@ module.exports = (sequelize, DataTypes) => {
33
const Document = sequelize.define('Document', {
44
title: {
55
type: DataTypes.STRING,
6-
allowNull: false
6+
allowNull: false,
7+
validate: {
8+
notEmpty: {
9+
msg: 'This field cannot be empty'
10+
}
11+
}
712
},
813
content: {
914
type: DataTypes.TEXT,
10-
allowNull: false
15+
allowNull: false,
16+
validate: {
17+
notEmpty: {
18+
msg: 'This field cannot be empty'
19+
}
20+
}
1121
},
1222
userId: {
1323
type: DataTypes.INTEGER,
1424
unique: true,
15-
allowNull: false
25+
allowNull: false,
1626
},
1727
access: {
1828
type: DataTypes.ENUM,
19-
values: ['public', 'private', 'role']
29+
values: ['public', 'private', 'role'],
30+
validate: {
31+
notEmpty: {
32+
msg: 'This field cannot be empty'
33+
}
34+
}
2035
}
2136
});
2237
Document.associate = (models) => {

server/models/user.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,24 @@ module.exports = (sequelize, DataTypes) => {
77
userName: {
88
type: DataTypes.STRING,
99
allowNull: false,
10-
unique: true
10+
unique: {
11+
args: true,
12+
msg: 'userName already exist'
13+
}
1114
},
1215
email: {
1316
type: DataTypes.STRING,
1417
allowNull: false,
15-
unique: true
18+
unique: {
19+
args: true,
20+
msg: 'email already exist'
21+
},
22+
validate: {
23+
isEmail: {
24+
args: true,
25+
msg: 'Input a valid email address'
26+
}
27+
}
1628
},
1729
password: {
1830
type: DataTypes.STRING,

0 commit comments

Comments
 (0)