Skip to content

Commit

Permalink
refactor /users, add search capabilities
Browse files Browse the repository at this point in the history
  • Loading branch information
FredericHeem committed Apr 5, 2018
1 parent 66379b9 commit f3bdcf9
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 72 deletions.
4 changes: 1 addition & 3 deletions server/src/plugins/users/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import MailJob from './jobs/mail/MailJob';
import MeRouter from './me/MeRouter';

import UserRouter from './user/UserRouter';
import UserApi from './user/UserApi';

import AuthenticationRouter from './authentication/AuthenticationRouter';

Expand Down Expand Up @@ -75,8 +74,7 @@ function setupRouter(app){
MeRouter(app);

//Users
let userApi = UserApi(app);
UserRouter(app, userApi);
UserRouter(app);
}

function setupAuthentication(app) {
Expand Down
3 changes: 2 additions & 1 deletion server/src/plugins/users/models/UserModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ module.exports = function(sequelize, DataTypes) {
attributes: ["name", "authId"]
}
],
where: { [key]: value }
where: { [key]: value },
attributes: ["id", "email", "username", "picture", "createdAt", "updatedAt"]
});
};
User.findByEmail = async function(email) {
Expand Down
2 changes: 1 addition & 1 deletion server/src/plugins/users/models/test/testModelUsers.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ describe('UserModel', function(){
assert(res);
assert(res.get().username);
assert(!res.get().password);
assert(res.get().passwordHash);
assert(!res.get().passwordHash);
let userJson = res.toJSON();
assert(!userJson.password);
});
Expand Down
16 changes: 12 additions & 4 deletions server/src/plugins/users/test/testUsers.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,27 +19,35 @@ describe('Users', function() {
assert(res);
});
it('should get all users', async () => {
let users = await client.get('v1/users');
const users = await client.get('v1/users');
assert(users);
assert(Number.isInteger(users.count));
assert(users.data);

//console.log(users);
console.log(users);
for(let user of users.data){
let userGetOne = await client.get(`v1/users/${user.id}`);
const userGetOne = await client.get(`v1/users/${user.id}`);
assert(userGetOne);
//console.log('user ' , userGetOne);
//assert(_.isEqual(user, userGetOne));
assert(user);
//console.log('user:', user)
//console.log('user:', userGetOne);
assert(userGetOne.id);
assert(userGetOne.username);
assert(userGetOne.createdAt);
assert(userGetOne.updatedAt);
assert(!userGetOne.password);

assert(!userGetOne.passwordHash);
}
});
it('should get all users', async () => {
const users = await client.get('v1/users?search=mail');
assert(users);
assert(Number.isInteger(users.count));
assert(users.data);
console.log(users);
});
it('should get all users with filter ASC', async () => {
let res = await client.get('v1/users?offset=1&order=ASC&limit=10');
assert.equal(res.data.length, 10);
Expand Down
33 changes: 0 additions & 33 deletions server/src/plugins/users/user/UserApi.js

This file was deleted.

91 changes: 61 additions & 30 deletions server/src/plugins/users/user/UserRouter.js
Original file line number Diff line number Diff line change
@@ -1,37 +1,68 @@
import Router from 'koa-66';
import Qs from 'qs';
import _ from "lodash";
import Qs from "qs";
import Sequelize from "sequelize";

let log = require('logfilename')(__filename);
export default function UserRouter(app) {
const { models } = app.data.sequelize;

export function UserHttpController(app, userApi){
log.debug("UserHttpController");
const api = {
pathname: "/users",
middlewares: [
app.server.auth.isAuthenticated,
app.server.auth.isAuthorized
],
ops: {
getAll: {
pathname: "/",
method: "get",
handler: async context => {
const filter = Qs.parse(context.request.querystring);
_.defaults(filter, {
limit: 100,
order: "DESC",
offset: 0
});
const result = await models.User.findAndCountAll({
limit: filter.limit,
order: [["createdAt", filter.order]],
offset: filter.offset,
where: filter.search && {
$or: [
{ username: { $like: `%${filter.search}%` } },
{ email: { $like: `%${filter.search}%` } }
]
}
});
context.body = {
count: result.count,
data: result.rows.map(user => user.toJSON())
};
context.status = 200;
}
},
getOne: {
pathname: "/:id",
method: "get",
handler: async context => {
const user = await models.User.findByUserId(context.state.user.id);

let respond = app.utils.http.respond;
return {
async getAll(context) {
return respond(
context,
userApi,
userApi.getAll,
[Qs.parse(context.request.querystring)]);
},
async getOne(context) {
let userId = context.params.id;
return respond(context, userApi, userApi.getOne, [userId]);
if (!user) {
context.status = 404;
context.body = {
error: {
code: 404,
name: "NotFound"
}
};
} else {
context.body = user.get();
context.status = 200;
}
}
}
}
};
}

export default function UserRouter(app, userApi){
let router = new Router();
let userHttpController = UserHttpController(app, userApi);

router.use(app.server.auth.isAuthenticated);
router.use(app.server.auth.isAuthorized);

router.get('/', userHttpController.getAll);
router.get('/:id', userHttpController.getOne);

app.server.baseRouter().mount("/users", router);
return router;
app.server.createRouter(api);
return {};
}

0 comments on commit f3bdcf9

Please sign in to comment.