diff --git a/README.md b/README.md index bdf4d02..51e62b4 100644 --- a/README.md +++ b/README.md @@ -57,28 +57,41 @@ POST /news "body": body //body of the article } -//result +//result: { "ok": ok //true on success, otherwise false "index": index //new index of the article, or undefined "error": error //error encountered, or undefined } -//similar to `/news/publish`, but allows overwriting an existing post +//similar to `/news/publish`, but allows overwriting an existing article PATCH /news/:id //arguments: { - "key": key //the whitelist key, allows access to the POST routes + "key": key //the whitelist key, allows access to the PATCH routes "title": title //title of the article "author": author //author of the article "body": body //body of the article } -//result +//result: { "ok": ok //true on success, otherwise false "error": error //error encountered, or undefined } +//remove an article from the news feed +DELETE /news/:id + +//arguments: +{ + "key": key //the whitelist key, allows access to the DELETE routes +} + +//result: +{ + "ok": ok //true on success, otherwise false + "error": error //error encountered, or undefined +} ``` diff --git a/server/news/index.js b/server/news/index.js index bcadbda..d563e4b 100644 --- a/server/news/index.js +++ b/server/news/index.js @@ -5,6 +5,7 @@ const router = express.Router(); const query = require('./query'); const publish = require('./publish'); const edit = require('./edit'); +const remove = require('./remove'); //basic route management router.get('/', query(false, false)); @@ -20,4 +21,6 @@ router.post('/', publish); router.patch('/:id(\\d+)', edit); +router.delete('/:id(\\d+)', remove); + module.exports = router; diff --git a/server/news/remove.js b/server/news/remove.js new file mode 100644 index 0000000..605e04b --- /dev/null +++ b/server/news/remove.js @@ -0,0 +1,43 @@ +const { Op } = require('sequelize'); +const { articles, revisions } = require('../database/models'); + +const route = async (req, res) => { + //check the key + if (req.body.key != process.env.QUERY_KEY) { + return res.status(401).json({ ok: false, error: 'invalid key' }); + } + + //get the existing record + const record = await articles.findOne({ + where: { + index: { + [Op.eq]: req.params.id + } + } + }); + + if (!record) { + return res.status(500).json({ ok: false, error: 'failed to remove non-existing record' }); + } + + //store the revision + await revisions.upsert({ + title: record.title, + author: record.author, + body: record.body, + originalIndex: record.index + }); + + //destroy the data + await articles.destroy({ + where: { + index: req.params.id + } + }); + + return res.status(200).json({ + ok: true + }); +}; + +module.exports = route; \ No newline at end of file