From 5495ebf176736b39fa1706760b5c49985309b4f4 Mon Sep 17 00:00:00 2001 From: Angus Townsley Date: Mon, 17 Jun 2024 22:38:58 +0100 Subject: [PATCH 1/2] Inital endpoints for contacts api --- src/server.js | 70 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/src/server.js b/src/server.js index 30f0ce3..cedac4d 100644 --- a/src/server.js +++ b/src/server.js @@ -1,13 +1,75 @@ -const express = require("express") -const morgan = require("morgan") -const cors = require("cors") +const express = require('express') +const morgan = require('morgan') +const cors = require('cors') const app = express() +let contacts = require('../data/contacts.js') -app.use(morgan("dev")) +app.use(morgan('dev')) app.use(cors()) app.use(express.json()) // write your app code here +let nextId = 3 + +app.get('/contacts', (req, res) => { + res.send({ contacts: contacts }) +}) + +app.post('/contacts', (req, res) => { + const newContact = { id: nextId, ...req.body } + + contacts.push(newContact) + + nextId++ + + res.status(201).send({ contact: newContact }) +}) + +app.get('/contacts/:id', (req, res) => { + const matchingContact = contacts.find((element) => { + return element.id === parseInt(req.params['id']) + }) + + if (!matchingContact) { + res.sendStatus(404) + } + + res.send({ contact: matchingContact }) +}) + +app.delete('/contacts/:id', (req, res) => { + const matchingContact = contacts.find((element) => { + return element.id === parseInt(req.params['id']) + }) + + if (!matchingContact) { + res.sendStatus(404) + } + + contacts = contacts.filter((element) => { + return !(element.id === parseInt(req.params['id'])) + }) + + res.send({ contact: matchingContact }) +}) + +app.put('/contacts/:id', (req, res) => { + let matchingContact = contacts.find((element) => { + return element.id === parseInt(req.params['id']) + }) + + if (!matchingContact) { + res.sendStatus(404) + } + + Object.keys(matchingContact).forEach((element) => { + matchingContact[element] = req.body[element] + }) + + matchingContact.id = parseInt(req.params['id']) + + res.send({ contact: matchingContact }) +}) module.exports = app From f15ded5dda4ea352ead80a1884a1b6464b57cf50 Mon Sep 17 00:00:00 2001 From: Angus Townsley Date: Tue, 18 Jun 2024 09:41:28 +0100 Subject: [PATCH 2/2] Endpoints for meetings api --- Sequence Diagram.png | Bin 0 -> 50986 bytes src/server.js | 80 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 Sequence Diagram.png diff --git a/Sequence Diagram.png b/Sequence Diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..4cff77cdbc6d5e085c7c62ebd0863b4bfc6274c8 GIT binary patch literal 50986 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 literal 0 HcmV?d00001 diff --git a/src/server.js b/src/server.js index cedac4d..6c144ae 100644 --- a/src/server.js +++ b/src/server.js @@ -3,6 +3,7 @@ const morgan = require('morgan') const cors = require('cors') const app = express() let contacts = require('../data/contacts.js') +let meetings = require('../data/meetings.js') app.use(morgan('dev')) app.use(cors()) @@ -51,6 +52,10 @@ app.delete('/contacts/:id', (req, res) => { return !(element.id === parseInt(req.params['id'])) }) + meetings = meetings.filter((element) => { + return !(element.contactId === parseInt(req.params['id'])) + }) + res.send({ contact: matchingContact }) }) @@ -72,4 +77,79 @@ app.put('/contacts/:id', (req, res) => { res.send({ contact: matchingContact }) }) +let nextMeetingId = 4 + +app.get('/meetings', (req, res) => { + res.send({ meetings: meetings }) +}) + +app.post('/contacts/:id/meetings', (req, res) => { + const newMeeting = { + id: nextMeetingId, + contactId: parseInt(req.params['id']), + ...req.body, + } + + meetings.push(newMeeting) + + nextMeetingId++ + + res.status(201).send({ meeting: newMeeting }) +}) + +app.get('/meetings/:id', (req, res) => { + const matchingMeeting = meetings.find((element) => { + return element.contactId === parseInt(req.params['id']) + }) + + if (!matchingMeeting) { + res.sendStatus(404) + } + + res.send({ meeting: matchingMeeting }) +}) + +app.delete('/meetings/:id', (req, res) => { + const matchingMeeting = meetings.find((element) => { + return element.id === parseInt(req.params['id']) + }) + + if (!matchingMeeting) { + res.sendStatus(404) + } + + meetings = meetings.filter((element) => { + return !(element.id === parseInt(req.params['id'])) + }) + + res.send({ meeting: matchingMeeting }) +}) + +app.put('/meetings/:id', (req, res) => { + + let matchingMeeting = meetings.find((element, index) => { + return element.id === parseInt(req.params['id']) + }) + + if (!matchingMeeting) { + res.sendStatus(404) + } + + Object.keys(matchingMeeting).forEach((element) => { + if (req.body[element]) { + matchingMeeting[element] = req.body[element] + } + }) + + res.send({ meeting: matchingMeeting }) +}) + +app.get('/contacts/:id/meetings', (req, res) => { + const contactsMeetings = meetings.filter((element) => { + return element.contactId === parseInt(req.params['id']) + }) + + res.send({ meetings: contactsMeetings }) +}) + module.exports = app