From 86341123b20f04608d74fdc53469ac831f44bdae Mon Sep 17 00:00:00 2001 From: Brian Segura <84042284+briansegura15@users.noreply.github.com> Date: Thu, 2 Nov 2023 23:41:37 +0000 Subject: [PATCH] Add new GET endpoint for /v1/campaign/:id This commit adds the new endpoint for retreiving a specific campaign by its ID. The endpoint responds with campaign data if found, or a 404 code if the campaign does not exist. Additional wiring between the api folder and api.js file were established. --- .../integration/v1.campaigns.test.js | 36 +++++++++++++++++++ server/api.js | 5 +++ server/routes/api/v1Admin.js | 1 + server/routes/api/v1Campaigns.js | 21 +++++++++++ server/routes/v1Router.js | 9 +++++ 5 files changed, 72 insertions(+) create mode 100644 server/__tests__/integration/v1.campaigns.test.js create mode 100644 server/routes/api/v1Admin.js create mode 100644 server/routes/api/v1Campaigns.js create mode 100644 server/routes/v1Router.js diff --git a/server/__tests__/integration/v1.campaigns.test.js b/server/__tests__/integration/v1.campaigns.test.js new file mode 100644 index 000000000..6e4d9d427 --- /dev/null +++ b/server/__tests__/integration/v1.campaigns.test.js @@ -0,0 +1,36 @@ +// below are where the tests for the campaign endpoints will go, I kept getting errors back and couldnt set this up correctly 😞, i got thrown off by the section about inserting test data into the database + +// const request = require('supertest') +// const app = require('../../app') +// const Campaign = require('../../db/models/campaign') + +// describe('v1Campaigns', () => { +// beforeEach(async () => { +// // Insert test data into the database +// await Campaign.query().insert([ +// { name: 'The Breathe Act', organization: 'M4BL', page_url: "breatheact.org", cause: "Civic Rights", type: "Grant" }, +// // { name: 'Campaign 2', description: 'Description 2' }, +// // { name: 'Campaign 3', description: 'Description 3' }, +// ]) +// }) + +// afterEach(async () => { +// // Delete test data from the database +// await Campaign.query().delete() +// }) + +// describe('GET /v1/campaigns/:id', () => { +// test('returns a campaign by ID', async () => { +// const campaign = await Campaign.query().first() +// const response = await request(app).get(`/v1/campaigns/${campaign.id}`) +// expect(response.status).toBe(200) +// expect(response.body).toEqual(campaign) +// }) + +// test('returns a 404 error for non-existent campaign', async () => { +// const response = await request(app).get('/v1/campaigns/999') +// expect(response.status).toBe(404) +// expect(response.text).toBe('Campaign not found') +// }) +// }) +// }) \ No newline at end of file diff --git a/server/api.js b/server/api.js index 6ca4e339a..f31a119d8 100644 --- a/server/api.js +++ b/server/api.js @@ -12,6 +12,8 @@ const lob = require('./routes/api/lob') const checkout = require('./routes/api/checkout') //const twilio = require('./routes/api/twilio') const eventLogger = require('./routes/api/event_logger') +const v1Router = require("./routes/v1Router") + // Created a nested router const apiRouter = express.Router() @@ -36,4 +38,7 @@ apiRouter.use('/checkout', checkout) //apiRouter.use('/twilio', twilio) apiRouter.use('/event_logger', eventLogger) +// v1 routes +apiRouter.use('/v1', v1Router) + module.exports = apiRouter diff --git a/server/routes/api/v1Admin.js b/server/routes/api/v1Admin.js new file mode 100644 index 000000000..b034c965c --- /dev/null +++ b/server/routes/api/v1Admin.js @@ -0,0 +1 @@ +// this is where all the admin endpoints will exist, this had to be commented out in order for the error regarding missing modules to be fixed. \ No newline at end of file diff --git a/server/routes/api/v1Campaigns.js b/server/routes/api/v1Campaigns.js new file mode 100644 index 000000000..9acd7ee56 --- /dev/null +++ b/server/routes/api/v1Campaigns.js @@ -0,0 +1,21 @@ +const express = require('express') +const router = express.Router() +const Campaign = require('../../db/models/campaign') + +router.get('/:id', async (req, res) => { + try { + const campaign = await Campaign.query().findById(req.params.id) + if (campaign) { + res.send(campaign) + } else { + res.status(404).send('Campaign not found') + } + } catch (error) { + console.error(error) + res.status(500).send('Internal Server Error') + } + }) + + // below is where you would find the V1 endpoints for the GET all campaigns, POST a new campaign, PUT an existing campaign, and DELETE (maye) a campaign + +module.exports = router diff --git a/server/routes/v1Router.js b/server/routes/v1Router.js new file mode 100644 index 000000000..f9a5b29ea --- /dev/null +++ b/server/routes/v1Router.js @@ -0,0 +1,9 @@ +const express = require('express') +const router = express.Router() +const v1Campaigns = require('./api/v1Campaigns') +// const v1Admin = require('./api/v1Admin') this had to be commented out in order for the error regarding missing modules to be fixed. + +router.use('/campaigns', v1Campaigns) +// router.use('/admin', v1Admin) this had to be commented out in order for the error regarding missing modules to be fixed. + +module.exports = router \ No newline at end of file