diff --git a/src/Routes/urls.js b/src/Routes/urls.js index ecf013c..69b049a 100644 --- a/src/Routes/urls.js +++ b/src/Routes/urls.js @@ -2,7 +2,13 @@ const express = require('express'); const router = express.Router(); const fs = require('fs'); -router.get('/urls.json', (req, res) => { +router.use(express.json()); + +function saveUrls(urls, callback) { + fs.writeFile('src/Assets/urls.json', JSON.stringify(urls, null, 2), callback); +} + +router.get('/urls', (req, res) => { fs.readFile('src/Assets/urls.json', 'utf8', (err, data) => { if (err) { console.error(err); @@ -15,6 +21,107 @@ router.get('/urls.json', (req, res) => { }); }); +router.post('/urls', (req, res) => { + fs.readFile('src/Assets/urls.json', 'utf8', (err, data) => { + if (err) { + console.error(err); + res.status(500).send('Internal Server Error'); + return; + } + + const urls = JSON.parse(data); + const newUrl = { + link: req.body.link, + is_public: req.body.is_public + }; + urls.push(newUrl); + + saveUrls(urls, (err) => { + if (err) { + console.error(err); + res.status(500).send('Error saving URL'); + return; + } + res.status(201).json(newUrl); + }); + }); +}); + +router.delete('/urls', (req, res) => { + const linkToDelete = req.body.link; + if (!linkToDelete) { + res.status(400).send('Please provide a link to delete'); + return; + } + + fs.readFile('src/Assets/urls.json', 'utf8', (err, data) => { + if (err) { + console.error(err); + res.status(500).send('Internal Server Error'); + return; + } + + const urls = JSON.parse(data); + const index = urls.findIndex(url => url.link === linkToDelete); + + if (index !== -1) { + urls.splice(index, 1); + + fs.writeFile('src/Assets/urls.json', JSON.stringify(urls, null, 2), (err) => { + if (err) { + console.error(err); + res.status(500).send('Error deleting URL'); + return; + } + res.status(204).send(); + }); + } else { + res.status(404).send('URL not found'); + } + }); + }); + + +router.patch('/urls', (req, res) => { + const linkToModify = req.body.link; + if (!linkToModify) { + res.status(400).send('Please provide a link to modify'); + return; + } + + fs.readFile('src/Assets/urls.json', 'utf8', (err, data) => { + if (err) { + console.error(err); + res.status(500).send('Internal Server Error'); + return; + } + + const urls = JSON.parse(data); + const urlToUpdate = urls.find(url => url.link === linkToModify); + + if (urlToUpdate) { + if (req.body.is_public !== undefined) { + urlToUpdate.is_public = req.body.is_public; + } + + saveUrls(urls, (err) => { + if (err) { + console.error(err); + res.status(500).send('Error updating URL'); + return; + } + res.status(204).send(); + }); + } else { + res.status(404).send('URL not found'); + } + }); + }); + +router.delete('/urls', (req, res) => { + res.status(400).send('Please provide an index to delete a specific URL'); +}); + module.exports = { basePath: '/', router: router diff --git a/src/server.js b/src/server.js index 82a318f..2dbd987 100644 --- a/src/server.js +++ b/src/server.js @@ -47,7 +47,7 @@ function listRoutes(router) { path = path.slice(2); } routes.push({ - file: path.split('/')[1], // Extract file name from the path + file: path.split('/')[1], methods: Object.keys(middleware.route.methods), }); } else if (middleware.name === 'router') {