Skip to content

Instantly share code, notes, and snippets.

@fdjones
Created March 12, 2018 21:23
Show Gist options
  • Save fdjones/913f35133630ba8a051a7f3a9aa95389 to your computer and use it in GitHub Desktop.
Save fdjones/913f35133630ba8a051a7f3a9aa95389 to your computer and use it in GitHub Desktop.
const mockData = { message: 'Welcome!' };
const controllers = {
createOne(model, body) {
return Promise.resolve(mockData);
},
updateOne(documentToUpdate, update) {
return Promise.resolve(mockData);
},
deleteOne(documentToDelete) {
return Promise.resolve(mockData);
},
getOne(documentToGet) {
return Promise.resolve(mockData);
},
getAll(model) {
return Promise.resolve(mockData);
},
findByParam(model, id) {
return Promise.resolve(mockData);
},
};
const createOne = model => (req, res, next) => controllers.createOne(model, req.body)
.then(result => res.json(result))
.catch(e => next(e));
// PUT /user/:id req will be in form: { name: updatedName }
const updateOne = model => async (req, res, next) => {
const docToUpdate = req.docFromId;
const update = req.body;
return controllers.updateOne(docToUpdate, update)
.then(doc => res.json(doc))
.catch(e => next(e));
};
const deleteOne = model => (req, res, next) => controllers.deleteOne(req.docFromId)
.then(doc => res.json(doc))
.catch(e => next(e));
const getOne = model => (req, res, next) => controllers.getOne(req.docToUpdate)
.then(doc => res.json(doc))
.catch(e => next(e));
const getAll = model => (req, res, next) => controllers.getAll(model)
.then(docs => res.json(docs))
.catch(e => next(e));
const findByParam = model => (req, res, next, id) => controllers.findByParam(model, id)
.then((doc) => {
if (!doc) {
next(new Error('Not Found Error'));
} else {
req.docFromId = doc;
next();
}
});
const generateController = function generateController(model, overrides = {}) {
const defaults = {
findByParam: findByParam(model),
getAll: getAll(model),
getOne: getOne(model),
deleteOne: deleteOne(model),
updateOne: updateOne(model),
createOne: createOne(model),
};
return { ...defaults, ...overrides };
};
module.exports = {
generateController,
controllers,
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment