Skip to content

Commit

Permalink
feat(tasks): add clean populate example ✨
Browse files Browse the repository at this point in the history
  • Loading branch information
PierreBrisorgueil committed May 3, 2020
1 parent c4ed4b4 commit dfaf37b
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 9 deletions.
2 changes: 1 addition & 1 deletion modules/tasks/controllers/tasks.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ exports.taskByID = async (req, res, next, id) => {
if (!task) responses.error(res, 404, 'Not Found', 'No Task with that identifier has been found')();
else {
req.task = task;
req.isOwner = task.user; // used if we proteck road by isOwner policy
if (task.user) req.isOwner = task.user._id; // user id used if we proteck road by isOwner policy
next();
}
} catch (err) {
Expand Down
16 changes: 12 additions & 4 deletions modules/tasks/repositories/tasks.repository.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,26 @@ const mongoose = require('mongoose');

const Task = mongoose.model('Task');


const defaultPopulate = [{
path: 'user',
select: 'email firstName lastName',
},
];


/**
* @desc Function to get all task in db with filter or not
* @return {Array} tasks
*/
exports.list = (filter) => Task.find(filter).sort('-createdAt').exec();
exports.list = (filter) => Task.find(filter).populate(defaultPopulate).sort('-createdAt').exec();

/**
* @desc Function to create a task in db
* @param {Object} task
* @return {Object} task
*/
exports.create = (task) => new Task(task).save();
exports.create = (task) => new Task(task).save().then((doc) => doc.populate(defaultPopulate).execPopulate());

/**
* @desc Function to get a task from db
Expand All @@ -25,15 +33,15 @@ exports.create = (task) => new Task(task).save();
*/
exports.get = (id) => {
if (!mongoose.Types.ObjectId.isValid(id)) return null;
return Task.findOne({ _id: id }).exec();
return Task.findOne({ _id: id }).populate(defaultPopulate).exec();
};

/**
* @desc Function to update a task in db
* @param {Object} task
* @return {Object} task
*/
exports.update = (task) => new Task(task).save();
exports.update = (task) => new Task(task).save().then((doc) => doc.populate(defaultPopulate).execPopulate());

/**
* @desc Function to delete a task in db
Expand Down
2 changes: 1 addition & 1 deletion modules/tasks/routes/tasks.routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ module.exports = (app) => {
.post(passport.authenticate('jwt'), policy.isAllowed, model.isValid(tasksSchema.Task), tasks.create); // create

// classic crud
app.route('/api/tasks/:taskId').all(passport.authenticate('jwt'), policy.isAllowed) // policy.isOwner available
app.route('/api/tasks/:taskId').all(passport.authenticate('jwt'), policy.isAllowed) // policy.isOwner available (require set in middleWare)
.get(tasks.get) // get
.put(model.isValid(tasksSchema.Task), tasks.update) // update
.delete(model.isValid(tasksSchema.Task), tasks.delete); // delete
Expand Down
2 changes: 1 addition & 1 deletion modules/tasks/tests/tasks.crud.tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ describe('Tasks CRUD Tests :', () => {
expect(result.body.message).toBe('task created');
expect(result.body.data.title).toBe(_tasks[1].title);
expect(result.body.data.description).toBe(_tasks[1].description);
expect(result.body.data.user).toBe(user.id);
expect(result.body.data.user.id).toBe(user.id);
} catch (err) {
console.log(err);
expect(err).toBeFalsy();
Expand Down
4 changes: 2 additions & 2 deletions modules/uploads/controllers/uploads.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ exports.uploadByName = async (req, res, next, uploadName) => {
if (!upload) responses.error(res, 404, 'Not Found', 'No Upload with that name has been found')();
else {
req.upload = upload;
req.isOwner = upload.metadata.user; // used if we proteck road by isOwner policy
if (upload.metadata && upload.metadata.user) req.isOwner = upload.metadata.user; // user id if we proteck road by isOwner policy
next();
}
} catch (err) {
Expand Down Expand Up @@ -123,7 +123,7 @@ exports.uploadByImageName = async (req, res, next, uploadImageName) => {

// return
req.upload = upload;
req.isOwner = upload.metadata.user; // used if we proteck road by isOwner policy
if (upload.metadata && upload.metadata.user) req.isOwner = upload.metadata.user; // user id if we proteck road by isOwner policy
req.sharpSize = parseInt(opts[1], 0) || null;
req.sharpOption = opts[2] || null;
next();
Expand Down

0 comments on commit dfaf37b

Please sign in to comment.