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
JavaScript
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();
});
}
};