UNPKG

alphascript-server

Version:

CRUD operations for mongo and other functionalities to get started quickly in any CMS project

113 lines (93 loc) 4.09 kB
var api = require('../../../'); var formidable = require('formidable'); var objectPath = require("object-path"); var Q = require('q'); module.exports = { list: function (req, res) { if (!req.entity.query) return res.status(404).send("O seu pedido não pode ser processado"); req.entity.query(req, req.params.id, req.entityAction, function (err, results) { if (err instanceof Error) { api.error.log(err); return res.status(500).send(api.error.DB_GENERIC); } else if (err) return res.status(500).send(err); if (!req.params.id) { if (typeof req.entity.filter === 'function') data = data.filter(req.entity.filter); if (typeof req.entity.map === 'function') data = data.map(req.entity.map); } res.json(results); }); }, edit: function (req, res) { var form = new formidable.IncomingForm(); form.parse(req, function (err, fields, files) { if (err) { api.error.log(err); return res.status(500).send("Não foi possível receber o seu pedido, por favor tente novamente"); } var item = JSON.parse(fields.item); if (typeof req.entity.id === 'undefined') return res.status(404).send('O seu pedido não pode ser processado'); var id = item[req.entity.id] ? item[req.entity.id] : undefined; //determine action var action = typeof id !== 'undefined' ? "edit" : "new"; var save = typeof id !== 'undefined' ? req.entity.update : req.entity.insert; if (typeof save !== 'function') return res.status(404).send('O seu pedido não pode ser processado'); //validate var validate = typeof req.entity.validate === 'function' ? req.entity.validate : api.skip; validate(item, function (err) { if (err) return res.status(400).send(err.message || err); //upload files var promises = []; for (var file in files) { promises.push(api.document.upload(req, req.entityName, id, file, files[file])); } Q.all(promises).then(function (results) { results.forEach(function (result) { var keys = result.key.replace("[", ".").replace("]", "").split('.'); objectPath.set(item, keys, result.document.filepath); }); delete item.newFile; //set logs if (action === "new") { item.created_at = new Date(); item.created_by = req.user.username; } else { item.updated_at = new Date(); item.updated_by = req.user.username; } //save object to db save(req, item, function (err, item) { if (err instanceof Error) { api.error.log(err); return res.status(500).send(api.error.DB_GENERIC); } else if (err) return res.status(500).send(err); //emit through websockets var activity = req.entityName + "." + action; var websocket = typeof req.entity.websocket === 'function' ? req.entity.websocket(req) + '.' + activity : activity; api.options.io.emit(websocket, item); //log activity api.activity.log(activity, id, req); res.json(item); }); }); }, req); }); }, remove: function (req, res) { //check entity authenticity if (typeof req.entity.remove !== 'function') return res.status(404).send('O seu pedido não pode ser processado'); //check object dependencies req.entity.remove(req, req.params.id, function (err) { if (err instanceof Error) { api.error.log(err); return res.status(409).send(api.error.DB_GENERIC); } else if (err) return res.status(409).send(err); //emit through websockets var activity = req.entityName + '.remove'; var websocket = typeof req.entity.websocket === 'function' ? req.entity.websocket(req) + '.' + activity : activity; api.options.io.emit(websocket, req.params.id); //log activity api.activity.log(activity, req.params.id, req); res.end(); }); } };