import omitBy from 'lodash/omitBy'; import isUndefined from 'lodash/isUndefined'; import Collection from '../../models/collection'; function removeUndefined(obj) { return omitBy(obj, isUndefined); } export default function createCollection(req, res) { const { id: collectionId } = req.params; const owner = req.user._id; const { name, description, slug } = req.body; const values = removeUndefined({ name, description, slug }); function sendFailure({ code = 500, message = 'Something went wrong' }) { res.status(code).json({ success: false, message }); } function sendSuccess(collection) { if (collection == null) { sendFailure({ code: 404, message: 'Not found, or you user does not own this collection' }); return; } res.json(collection); } async function findAndUpdateCollection() { // Only update if owner matches current user return Collection.findOneAndUpdate( { _id: collectionId, owner }, values, { new: true, runValidators: true, setDefaultsOnInsert: true } ).populate([ { path: 'owner', select: ['id', 'username'] }, { path: 'items.project', select: ['id', 'name', 'slug'], populate: { path: 'user', select: ['username'] } } ]).exec(); } return findAndUpdateCollection() .then(sendSuccess) .catch(sendFailure); }