diff --git a/mailing-list-api/mailing-lists.js b/mailing-list-api/mailing-lists.js index bc7c08a..fc54cce 100644 --- a/mailing-list-api/mailing-lists.js +++ b/mailing-list-api/mailing-lists.js @@ -6,3 +6,4 @@ module.exports = { "khadar@techtonica.org", ], }; + diff --git a/mailing-list-api/package.json b/mailing-list-api/package.json index 8b70aaa..9125c5b 100644 --- a/mailing-list-api/package.json +++ b/mailing-list-api/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "license": "CC-BY-SA-4.0", "description": "You must update this package", + "type": "module", "scripts": { "test": "jest" }, @@ -16,5 +17,10 @@ "homepage": "https://github.com/CodeYourFuture/CYF-Coursework-Template#readme", "devDependencies": { "jest": "^26.6.3" + }, + "dependencies": { + "express": "^4.19.2", + "nodemon": "^3.1.0" } + } diff --git a/mailing-list-api/server.js b/mailing-list-api/server.js new file mode 100644 index 0000000..d6c0f9e --- /dev/null +++ b/mailing-list-api/server.js @@ -0,0 +1,58 @@ +import express from "express"; +const app = express(); +app.use(express.json()); + +const lists = new Map(); +lists.set("staff", ["talea@techtonica.org", "michelle@techtonica.org"]); +lists.set("cohort-h1-2020", [ + "ali@techtonica.org", + "humail@techtonica.org", + "khadar@techtonica.org", +]); + +app.get("/lists", (req, res) => { + const listsArray = Array.from(lists.keys()); + lists + ? res.status(200).send({ lists: listsArray }) + : res.status(200).send({}); +}); + +app.get("/lists/:name", (req, res) => { + const params = req.params.name; + + lists.has(params) + ? res.status(200).send({ name: params, members: lists.get(params) }) + : res.status(404); +}); + +app.delete("/lists/:name", (req, res) => { + const params = req.params.name; + lists.delete(params) + ? res.status(200).send(`Deleted ${params} successfully!`) + : res.status(404); +}); + +app.put("/lists/:name", (req, res) => { + const params = req.params.name; + const body = req.body; + + if (params.toLowerCase() !== body.name.toLowerCase()) { + res + .status(400) + .send( + `Request could not be completed. Path (${params}) & JSON body ("name": ${body.name}) do not match` + ); + } + + if (lists.has(params)) { + lists.set(params, body.members); + res.send(`List ${params} has been updated`); + } else { + lists.set(params, body.members); + res.send(`New list ${params} has been created`); + } +}); + +const listener = app.listen(3003, () => { + console.log(`Your listening on port ${listener.address().port}`); +}); \ No newline at end of file