var model = undefined; exports.context = function(server, path, itemsModel) { if (!server) done('has to provide a restify server object'); var context = "/items"; if (path) context = path + context; server.get(context + '/', this.list); server.get(context + '/:id', this.read); server.get(context + '-count', this.count); server.post(context + '/', this.save); server.del(context + '/:id', this.destroy); model = itemsModel; }; exports.list = function(req, res, next) { var page_no = req.query.page || 1; var sortField = req.query.sortFields || "id"; var sortDirection = req.query.sortDirections || "asc"; model.listAll(page_no, sortField, sortDirection, function(err, items) { if (err) { res.send(err); } else { if (items) { model.countAll(function(err, n) { if (err) { res.send(err); } else { if (n) { var page = { "currentPage" : page_no, "list" : items, "pageSize" : 10, "sortDirections" : sortDirection, "sortFields" : sortField, "totalResults" : n }; res.json(page); next(); } } }); } else { res.send(err); } } }) }; exports.read = function(req, res, next) { var key = req.params.id; model.read(key, function(err, item) { if (err) { res.send(err); } else { if (item) { res.json(item); next(); } else { res.send(err); } } }) }; exports.count = function(req, res, next) { model.countAll(function(err, n) { if (err) { res.send(err); } else { var page = { count: n }; res.json(page) next(); } }) }; exports.save = function(req, res, next) { if (req.params.id) { model.update(req.params.id, req.params.description, req.params.done, function(err, item) { if (err) { res.send(err); } else { res.json(item); next(); } }); } else { model.create(req.params.description, req.params.done, function(err, item) { if (err) { res.send(err); } else { res.json(item); next(); } }); } }; exports.destroy = function(req, res, next) { if (req.params.id) { model.destroy(req.params.id, function(err, item) { if (err) { res.send(err); } else { res.json(item); } }); } }