diff --git a/package-lock.json b/package-lock.json index cae920f6599d66f3622d4dd37df98a5826af73a2..b2e686311a738cab51fbc97947eb63ac3aadca09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -480,6 +480,7 @@ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", "dev": true }, + "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -772,10 +773,19 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "typedarray": "0.0.6" + } + }, + "config": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/config/-/config-3.2.4.tgz", + "integrity": "sha512-H1XIGfnU1EAkfjSLn9ZvYDRx9lOezDViuzLDgiJ/lMeqjYe3q6iQfpcLt2NInckJgpAeekbNhQkmnnbdEDs9rw==", + "optional": true, + "requires": { + "json5": "1.0.1" }, "dependencies": { "isarray": { @@ -813,7 +823,7 @@ "integrity": "sha512-H1XIGfnU1EAkfjSLn9ZvYDRx9lOezDViuzLDgiJ/lMeqjYe3q6iQfpcLt2NInckJgpAeekbNhQkmnnbdEDs9rw==", "optional": true, "requires": { - "json5": "^1.0.1" + "json5": "1.0.1" } }, "configstore": { @@ -882,7 +892,8 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "create-error-class": { "version": "3.0.2", @@ -6575,6 +6586,8 @@ "dev": true }, "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" diff --git a/src/controllers/MachineController.js b/src/controllers/MachineController.js index 2b2f7227bf2c530aecfc1dd44d189fc3bc431991..aa8e6b69acd5c1b49740d8bf6db1bc02a66c4f3d 100644 --- a/src/controllers/MachineController.js +++ b/src/controllers/MachineController.js @@ -23,7 +23,9 @@ var qb = require("../db/query_builder.js"); var db = require("../db/db.js"); var squel = require("squel").useFlavour('postgres'); - +const fs = require('fs'); +const path = require('path'); + /** * Execute a query on DB and return a response to client * If the table specified on query was a table that refers @@ -153,7 +155,7 @@ module.exports = { file: filename }; - q = qb.select(table,{"id": req.params['id'] }); + q = qb.select(table,{"id" : req.params['id']}); db.query(req, q, function(err, data) { @@ -177,5 +179,43 @@ module.exports = { return res.status(200).json(machine); }); - } + }, + + delete: function(req,res) { + const table = "machines"; + selectQuery = qb.select_id(table,req.params.id); + + db.query(req, selectQuery, function(err, data) { + + if (err) { + req.log.error(err); + return res.status(500).json({error: 'db_connection_failed'}); + } + else if (data.rowCount !== 0) { + + file_to_exclude = data.rows[0].file; + const path_to_file = path.join(__dirname, `/../../images/uploads/${file_to_exclude}`); + + try { + fs.unlinkSync(path_to_file); + } catch (err) { + console.log(err); + } + } + + }); + + deleteQuery = qb.delete(table, req.params.id); + + db.query(req,deleteQuery, function(err, data) { + if (err) { + req.log.error(err); + return res.status(500).json({error:'db_connection_failed'}); + } + if (data.rowCount === 0) { + return res.status(404).json({error:'machine with this id not found'}); + } + return res.status(200).json({status: 'machine deleted with success'}); + }); + }, } diff --git a/src/db/query_builder.js b/src/db/query_builder.js index 28307190566ec708c10c5547d6b82f61b638fc1a..db2ff6af16b378b2f6332ba2ab31ba631a3d1d3e 100644 --- a/src/db/query_builder.js +++ b/src/db/query_builder.js @@ -119,5 +119,32 @@ module.exports = { var q = squel.update().table(table).where("id = ?", id ); this.set_from_attr(q, obj); return q; + }, + /** + * Delete an object in a table + * The object must contains the required values to be deleted on table + * + * @param {String} table Name of table + * @param {Number} number Numeric reference to id of tuple + * @returns {Object} Squel query + * @public + */ + delete: function (table, id){ + var q = squel.delete().from(table).where("id = ?", id ); + return q; + }, + + /** + * Select an object in a table + * The object must contains the required values to be selected on table + * + * @param {String} table Name of table + * @param {Number} number Numeric reference to id of tuple + * @returns {Object} Squel query + * @public + */ + select_id: function (table, id){ + var q = squel.select().from(table).where("id = ?", id ); + return q; } }; diff --git a/src/router.js b/src/router.js index 1b4fe2d8f2d454633f50dd6a90aebdcbbe902b3c..210066defc174a2a98873b8a66e82d1e90a2c645 100644 --- a/src/router.js +++ b/src/router.js @@ -152,10 +152,11 @@ module.exports = function(app, config) { app.get('/api/data/agentusesyear', function(req, res) { data.agentUses(req,res,"agentusesyear"); }); - + app.get('/api/machines', MachineController.index); app.post('/api/machines',upload.single('file'), MachineController.store); app.put('/api/machines/:id',upload.single('file'), MachineController.update); + app.delete('/api/machines/:id', MachineController.delete); }, /**