From 3aa6736ff2149e3859c8328f87c47d5040c1f77b Mon Sep 17 00:00:00 2001 From: Kevin Lau Date: Wed, 27 Mar 2024 22:28:02 -0400 Subject: [PATCH 1/9] create new migration and seed --- .../20240325204145_page_descriptions.js | 18 ++++++++++ src/backend/seeds/page_descriptions.js | 36 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 src/backend/migrations/20240325204145_page_descriptions.js create mode 100644 src/backend/seeds/page_descriptions.js diff --git a/src/backend/migrations/20240325204145_page_descriptions.js b/src/backend/migrations/20240325204145_page_descriptions.js new file mode 100644 index 0000000..52edf52 --- /dev/null +++ b/src/backend/migrations/20240325204145_page_descriptions.js @@ -0,0 +1,18 @@ + +exports.up = function(knex) { + knex.schema + .createTable('page_descriptions', (table) => { + table.increments('id'); + table.string('key').notNullable(); + table.string('title').notNullable(); + table.string('description', 5000); + table.json('images'); + table.datetime('last_updated', (options = { useTz: false })); + + }) + +}; + +exports.down = function(knex) { + knex.schema.dropTableIfExists('page_descriptions'); +}; diff --git a/src/backend/seeds/page_descriptions.js b/src/backend/seeds/page_descriptions.js new file mode 100644 index 0000000..04545e1 --- /dev/null +++ b/src/backend/seeds/page_descriptions.js @@ -0,0 +1,36 @@ +const { ENV_IS_STAGING_OR_PROD } = require('../knexfile'); + +exports.seed = function (knex) { + // Deletes ALL existing entries + if (ENV_IS_STAGING_OR_PROD) return Promise.resolve(); + return knex('page_descriptions') + .del() + .then(() => { + return knex('page_descriptions').insert([ + { + id: 1, + key: "sponsors", + title: 'Page title 1', + description: 'Page desc 1', + images: JSON.stringify([]), + last_updated: parseTimeFromRequest(Date.now()), + }, + { + id: 2, + key: "openings", + title: 'Page title 2', + description: 'Page desc 2', + images: JSON.stringify([]), + last_updated: parseTimeFromRequest(Date.now()), + }, + { + id: 3, + key: "team", + title: 'Page title 3', + description: 'Page desc 3', + images: JSON.stringify([]), + last_updated: parseTimeFromRequest(Date.now()), + }, + ]); + }); +}; From 6ebacd7a90c96fd6e5fe6c3f124f4238db154418 Mon Sep 17 00:00:00 2001 From: Kevin Lau Date: Wed, 27 Mar 2024 23:17:48 -0400 Subject: [PATCH 2/9] update seed file --- src/backend/seeds/13_page_descriptions.js | 41 +++++++++++++++++++++++ src/backend/seeds/page_descriptions.js | 36 -------------------- 2 files changed, 41 insertions(+), 36 deletions(-) create mode 100644 src/backend/seeds/13_page_descriptions.js delete mode 100644 src/backend/seeds/page_descriptions.js diff --git a/src/backend/seeds/13_page_descriptions.js b/src/backend/seeds/13_page_descriptions.js new file mode 100644 index 0000000..86fc259 --- /dev/null +++ b/src/backend/seeds/13_page_descriptions.js @@ -0,0 +1,41 @@ +const { parseTimeFromRequest } = require('../utils/db-dates'); +const { ENV_IS_STAGING_OR_PROD } = require('../knexfile'); + +if (!ENV_IS_STAGING_OR_PROD) { + exports.seed = function (knex) { + return knex('page_descriptions') + .del() + .then(() => { + return knex('page_descriptions').insert([ + { + id: 1, + key: 'sponsors', + title: 'Page title 1', + description: 'Page desc 1', + images: JSON.stringify([]), + last_updated: parseTimeFromRequest(Date.now()), + }, + { + id: 2, + key: 'openings', + title: 'Page title 2', + description: 'Page desc 2', + images: JSON.stringify([]), + last_updated: parseTimeFromRequest(Date.now()), + }, + { + id: 3, + key: 'team', + title: 'Page title 3', + description: 'Page desc 3', + images: JSON.stringify([]), + last_updated: parseTimeFromRequest(Date.now()), + }, + ]); + }); + }; +} else { + exports.seed = function (knex) { + return Promise.resolve(); + }; +} diff --git a/src/backend/seeds/page_descriptions.js b/src/backend/seeds/page_descriptions.js deleted file mode 100644 index 04545e1..0000000 --- a/src/backend/seeds/page_descriptions.js +++ /dev/null @@ -1,36 +0,0 @@ -const { ENV_IS_STAGING_OR_PROD } = require('../knexfile'); - -exports.seed = function (knex) { - // Deletes ALL existing entries - if (ENV_IS_STAGING_OR_PROD) return Promise.resolve(); - return knex('page_descriptions') - .del() - .then(() => { - return knex('page_descriptions').insert([ - { - id: 1, - key: "sponsors", - title: 'Page title 1', - description: 'Page desc 1', - images: JSON.stringify([]), - last_updated: parseTimeFromRequest(Date.now()), - }, - { - id: 2, - key: "openings", - title: 'Page title 2', - description: 'Page desc 2', - images: JSON.stringify([]), - last_updated: parseTimeFromRequest(Date.now()), - }, - { - id: 3, - key: "team", - title: 'Page title 3', - description: 'Page desc 3', - images: JSON.stringify([]), - last_updated: parseTimeFromRequest(Date.now()), - }, - ]); - }); -}; From e8b44a3e3d80c8369210435941164bd092bfd0f7 Mon Sep 17 00:00:00 2001 From: Kevin Lau Date: Thu, 28 Mar 2024 22:55:40 -0400 Subject: [PATCH 3/9] return --- .../20240325204145_page_descriptions.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/backend/migrations/20240325204145_page_descriptions.js b/src/backend/migrations/20240325204145_page_descriptions.js index 52edf52..047a885 100644 --- a/src/backend/migrations/20240325204145_page_descriptions.js +++ b/src/backend/migrations/20240325204145_page_descriptions.js @@ -1,16 +1,13 @@ exports.up = function(knex) { - knex.schema - .createTable('page_descriptions', (table) => { - table.increments('id'); - table.string('key').notNullable(); - table.string('title').notNullable(); - table.string('description', 5000); - table.json('images'); - table.datetime('last_updated', (options = { useTz: false })); - - }) - + return knex.schema.createTable('page_descriptions', (table) => { + table.increments('id'); + table.string('key').notNullable(); + table.string('title').notNullable(); + table.string('description', 5000); + table.json('images'); + table.datetime('last_updated', (options = { useTz: false })); + }); }; exports.down = function(knex) { From 2248e8d027bc2a921cee91f40facd4851443fc8d Mon Sep 17 00:00:00 2001 From: Kevin Lau Date: Tue, 2 Apr 2024 21:33:57 -0400 Subject: [PATCH 4/9] add api db and model for page desc --- src/backend/api/page-descriptions/add.js | 15 ++++++ src/backend/api/page-descriptions/get.js | 20 ++++++++ src/backend/api/page-descriptions/index.js | 23 ++++++++++ src/backend/api/page-descriptions/update.js | 16 +++++++ src/backend/db/index.js | 4 ++ src/backend/db/page-descriptions.js | 51 +++++++++++++++++++++ src/backend/models/page-descriptions.js | 17 +++++++ 7 files changed, 146 insertions(+) create mode 100644 src/backend/api/page-descriptions/add.js create mode 100644 src/backend/api/page-descriptions/get.js create mode 100644 src/backend/api/page-descriptions/index.js create mode 100644 src/backend/api/page-descriptions/update.js create mode 100644 src/backend/db/page-descriptions.js create mode 100644 src/backend/models/page-descriptions.js diff --git a/src/backend/api/page-descriptions/add.js b/src/backend/api/page-descriptions/add.js new file mode 100644 index 0000000..cfe4c06 --- /dev/null +++ b/src/backend/api/page-descriptions/add.js @@ -0,0 +1,15 @@ +import db from '../../db'; + +export default (req, res) => { + const pageDescription = req.body; + db.pageDescriptions.addPageDescription(pageDescription) + .then((response) => { + if (response) { + res.send(response); + } + }) + .catch((err) => { + console.log(`Could not add page description: ${err}`); + res.sendStatus(500); + }); +} diff --git a/src/backend/api/page-descriptions/get.js b/src/backend/api/page-descriptions/get.js new file mode 100644 index 0000000..4ed602d --- /dev/null +++ b/src/backend/api/page-descriptions/get.js @@ -0,0 +1,20 @@ +import db from '../../db'; +import * as R from 'ramda'; + +export default (req, res) => { + const { key } = req.params; + + db.pageDescriptions + .getPageDescriptionByKey(key) + .then((pageDescription) => { + if (R.isEmpty(pageDescription)) { + res.sendStatus(404); + } else { + res.send(pageDescription); + } + }) + .catch((err) => { + console.log(`Could not get page description with given key: ${err}`); + res.sendStatus(500); + }); +}; diff --git a/src/backend/api/page-descriptions/index.js b/src/backend/api/page-descriptions/index.js new file mode 100644 index 0000000..ef47b06 --- /dev/null +++ b/src/backend/api/page-descriptions/index.js @@ -0,0 +1,23 @@ +import express from 'express'; +import { param, body, check} from 'express-validator'; +import validationCheck from '../../utils/validation-check'; +import passArg from '../../utils/pass-arg'; +import { validateRequest } from '../../google-auth'; + +import get from './get'; +import add from './add'; +import update from './update'; + +const router = express.Router(); + + +router.get('/:key', [ + ], validationCheck, get); + +router.post('/', [ + body('key').exists(), + body('title').exists(), +], validationCheck, validateRequest, add); + +router.patch('/:key', [ +], validationCheck, validateRequest, update); diff --git a/src/backend/api/page-descriptions/update.js b/src/backend/api/page-descriptions/update.js new file mode 100644 index 0000000..8260b14 --- /dev/null +++ b/src/backend/api/page-descriptions/update.js @@ -0,0 +1,16 @@ +import db from '../../db'; + +export default (req, res) => { + const pageDescription = req.body; + const key = req.params.key + + db.pageDescriptions.updatePageDescriptionByKey(key, pageDescription) + .then((response) => { + console.log(response); + res.sendStatus(200); + }) + .catch((err) => { + console.log(`Could not update page description: ${err}`); + res.sendStatus(500); + }); +}; diff --git a/src/backend/db/index.js b/src/backend/db/index.js index 7c562fa..4b9e430 100644 --- a/src/backend/db/index.js +++ b/src/backend/db/index.js @@ -11,6 +11,7 @@ import newsletterRecipients from './newsletter-recipient'; import blogs from './blogs'; import geeseFeatures from './geese-features'; import products from './products' +import pageDescriptions from './page-descriptions'; export default { users: { @@ -45,5 +46,8 @@ export default { }, products: { ...products(db), + }, + pageDescriptions: { + ...pageDescriptions(db) } }; diff --git a/src/backend/db/page-descriptions.js b/src/backend/db/page-descriptions.js new file mode 100644 index 0000000..26d6866 --- /dev/null +++ b/src/backend/db/page-descriptions.js @@ -0,0 +1,51 @@ +import { + toPageDescription, + fromPageDescription, +} from '../models/page-descriptions'; +import * as R from 'ramda'; + +const getPageDescriptionByKey = (db) => (key) => + db('page_descriptions') + .where({ key }) + .then((res) => { + return R.isEmpty(res) ? res : toPageDescription(res[0]); + }) + .catch((err) => { + console.error(`Error in getPageDescriptionByKey: ${err}`); + throw err; + }); + +const addPageDescription = (db) => (pageDescription) => + db('page_descriptions') + .insert(fromPageDescription(pageDescription)) + .returning('key') + .then((response) => { + return response; + }) + .catch((err) => { + console.error(`Error in addPageDescription: ${err}`); + throw err; + }); + +const updatePageDescriptionByKey = (db) => (key, pageDescription) => + db('page_descriptions') + .where({ + key, + }) + .update({ + ...fromPageDescription(pageDescription), + }) + .then((response) => { + return response; + }) + .catch((err) => { + console.error(`Error in updatePageDescriptionByKey: ${err}`); + throw err; + }); + + +export default (db) => ({ + getPageDescriptionByKey: getPageDescriptionByKey(db), + addPageDescription: addPageDescription(db), + updatePageDescriptionByKey: updatePageDescriptionByKey(db), + }); \ No newline at end of file diff --git a/src/backend/models/page-descriptions.js b/src/backend/models/page-descriptions.js new file mode 100644 index 0000000..e0f699d --- /dev/null +++ b/src/backend/models/page-descriptions.js @@ -0,0 +1,17 @@ +import renameProps from '../utils/rename-props'; +import {parseTimeForResponse} from '../utils/db-dates'; + +// from frontend +export const fromPageDescription = (pageDescription) => renameProps(pageDescription, { + updatedAt: 'updated_at' + }); + +// to frontend +export const toPageDescription = (toPageDescription) => ({ + ...renameProps(toPageDescription, { + updated_at: 'updatedAt' + }), + updatedAt: parseTimeForResponse(toPageDescription.updated_at) +}); + + From 6d1dbb54977687b230545645b1321851199be81b Mon Sep 17 00:00:00 2001 From: Kevin Lau Date: Fri, 5 Apr 2024 21:52:42 -0400 Subject: [PATCH 5/9] update updated field, add test --- src/backend/api/index.js | 3 + src/backend/api/page-descriptions/index.js | 12 +- src/backend/db/page-descriptions.js | 2 +- .../20240325204145_page_descriptions.js | 21 ++- src/backend/seeds/13_page_descriptions.js | 9 +- .../integration/page-descriptions.test.js | 158 ++++++++++++++++++ 6 files changed, 185 insertions(+), 20 deletions(-) create mode 100644 src/backend/tests/integration/page-descriptions.test.js diff --git a/src/backend/api/index.js b/src/backend/api/index.js index 5ffa25a..646e155 100644 --- a/src/backend/api/index.js +++ b/src/backend/api/index.js @@ -9,6 +9,7 @@ import newsletter from './newsletter_recipient'; import blogs from './blogs'; import geeseFeatures from './geese-features'; import products from './products'; +import pageDescriptions from './page-descriptions' const router = express.Router(); @@ -22,5 +23,7 @@ router.use('/newsletter', newsletter); router.use('/blogs', blogs); router.use('/geese-features', geeseFeatures); router.use('/products', products) +router.use('/page-descriptions', pageDescriptions) + export default router; diff --git a/src/backend/api/page-descriptions/index.js b/src/backend/api/page-descriptions/index.js index ef47b06..bb652c4 100644 --- a/src/backend/api/page-descriptions/index.js +++ b/src/backend/api/page-descriptions/index.js @@ -10,14 +10,18 @@ import update from './update'; const router = express.Router(); - -router.get('/:key', [ - ], validationCheck, get); - router.post('/', [ body('key').exists(), body('title').exists(), ], validationCheck, validateRequest, add); +router.get('/:key', [ + param('key').isString() + ], validationCheck, get); + router.patch('/:key', [ + param('key').isString(), + body('title').exists(), ], validationCheck, validateRequest, update); + +export default router; diff --git a/src/backend/db/page-descriptions.js b/src/backend/db/page-descriptions.js index 26d6866..443b37b 100644 --- a/src/backend/db/page-descriptions.js +++ b/src/backend/db/page-descriptions.js @@ -18,7 +18,7 @@ const getPageDescriptionByKey = (db) => (key) => const addPageDescription = (db) => (pageDescription) => db('page_descriptions') .insert(fromPageDescription(pageDescription)) - .returning('key') + .returning('id') .then((response) => { return response; }) diff --git a/src/backend/migrations/20240325204145_page_descriptions.js b/src/backend/migrations/20240325204145_page_descriptions.js index 047a885..c91ac61 100644 --- a/src/backend/migrations/20240325204145_page_descriptions.js +++ b/src/backend/migrations/20240325204145_page_descriptions.js @@ -1,15 +1,18 @@ - exports.up = function(knex) { - return knex.schema.createTable('page_descriptions', (table) => { - table.increments('id'); - table.string('key').notNullable(); - table.string('title').notNullable(); - table.string('description', 5000); - table.json('images'); - table.datetime('last_updated', (options = { useTz: false })); + return knex.schema.hasTable('page_descriptions').then(function(exists) { + if (!exists) { + return knex.schema.createTable('page_descriptions', (table) => { + table.increments('id'); + table.string('key').notNullable(); + table.string('title').notNullable(); + table.string('description', 5000); + table.json('images'); + table.datetime('updated_at', { useTz: false }); + }); + } }); }; exports.down = function(knex) { - knex.schema.dropTableIfExists('page_descriptions'); + return knex.schema.dropTableIfExists('page_descriptions'); }; diff --git a/src/backend/seeds/13_page_descriptions.js b/src/backend/seeds/13_page_descriptions.js index 86fc259..64ce351 100644 --- a/src/backend/seeds/13_page_descriptions.js +++ b/src/backend/seeds/13_page_descriptions.js @@ -8,28 +8,25 @@ if (!ENV_IS_STAGING_OR_PROD) { .then(() => { return knex('page_descriptions').insert([ { - id: 1, key: 'sponsors', title: 'Page title 1', description: 'Page desc 1', images: JSON.stringify([]), - last_updated: parseTimeFromRequest(Date.now()), + updated_at: parseTimeFromRequest(Date.now()), }, { - id: 2, key: 'openings', title: 'Page title 2', description: 'Page desc 2', images: JSON.stringify([]), - last_updated: parseTimeFromRequest(Date.now()), + updated_at: parseTimeFromRequest(Date.now()), }, { - id: 3, key: 'team', title: 'Page title 3', description: 'Page desc 3', images: JSON.stringify([]), - last_updated: parseTimeFromRequest(Date.now()), + updated_at: parseTimeFromRequest(Date.now()), }, ]); }); diff --git a/src/backend/tests/integration/page-descriptions.test.js b/src/backend/tests/integration/page-descriptions.test.js new file mode 100644 index 0000000..f9726cb --- /dev/null +++ b/src/backend/tests/integration/page-descriptions.test.js @@ -0,0 +1,158 @@ +process.env.NODE_ENV = 'test'; +import chai from 'chai'; +import chaiHttp from 'chai-http'; +import app from '../../index'; +import { db } from '../../db'; + +chai.use(chaiHttp); +const expect = chai.expect; + +describe('Page Description Routes', () => { +// Rollback migrations. + before('migrate', async function () { + this.timeout(60 * 1000); // Resetting the DB can take a few seconds + await db.migrate.rollback(); + return db.migrate.latest(); + }); + + beforeEach('reseed', async function () { + this.timeout(60 * 1000); // Resetting the DB can take a few seconds + return db.seed.run(); + }); + + // Rollback migration again. + after(async function() { + this.timeout(60 * 1000); // Resetting the DB can take a few seconds + return db.migrate.rollback(); + }); + + describe('GET /api/page-descriptions/sponsors', () => { + it('should return page description info when called', done => { + chai + .request(app) + .get('/api/page-descriptions/sponsors') + .end((err, res) => { + if (res.error.text) { + console.error(res.error.text); + done(res.error.text); + } + expect(res).to.have.status(200); + expect(res.body).to.have.keys(['id', 'key', 'title', 'description', 'images', 'updatedAt']) + }); + done(); + }) + }); + + describe('POST /api/page-descriptions/', () => { + it('should add post to the database if data is in proper format', (done) => { + chai + .request(app) + .post('/api/page-descriptions') + .send({ + key: 'sponsors', + title: 'Page title 1', + description: 'Page desc 1', + }) + .end((err, res) => { + if (err) { + console.error(err); + } + expect(res).to.have.status(200); + + chai.request(app) + .get(`/api/page-descriptions/sponsors`) + .end((err, res) => { + if (res.error.text) { + console.error(res.error.text); + } + expect(res).to.have.status(200); + expect(res.body).to.have.property('id') + expect(res.body).to.have.property('key', 'sponsors') + expect(res.body).to.have.property('title', 'Page title 1') + expect(res.body).to.have.property('description', 'Page desc 1') + expect(res.body).to.have.property('updatedAt') + done(); + }) + + }); + }); + + it('should return 400 with no input supplied', (done) => { + chai + .request(app) + .post('/api/page-descriptions') + .end((err, res) => { + expect(res).to.have.status(400); + done(); + }); + }); + }); + + it('should return 400 with some required inputs not provided', done => { + chai.request(app) + .post('/api/page-descriptions/') + .send({ + key: 'test' + }) + .end((err, res) => { + expect(res).to.have.status(400); + done(); + }); + }); + + describe('PATCH /api/page-descriptions/key', () => { + it('should update the entry with "id" to match the new body', async () => { + return chai.request(app) + .patch(`/api/page-descriptions/sponsors`) + .send({ + key: 'sponsors', + title: 'Updated title', + description: 'Updated description', + }) + .then((res) => { + if (res.error.text) { + console.error(res.error.text); + } + expect(res).to.have.status(200); + return chai.request(app) + .get(`/api/page-descriptions/sponsors`) + .then((res2) => { + if (res2.error.text) { + console.error(res.error.text); + } + expect(res2).to.have.status(200); + expect(res2.body).to.have.property('id'); + expect(res2.body).to.have.property('key', 'sponsors'); + expect(res2.body).to.have.property('title', 'Updated title'); + expect(res2.body).to.have.property('description', 'Updated description'); + expect(res2.body).to.have.property('updatedAt'); + }); + }); + }); + + it('should return 404 if an key is not provided', done => { + chai.request(app) + .patch('/api/page-descriptions/') + .send({ + key: 'sponsors', + title: 'Updated title', + description: 'Updated description', + }) + .end((err, res) => { + expect(res).to.have.status(404); + done(); + }); + }); + + it('should return 400 when body is missing', done => { + chai.request(app) + .patch('/api/page-descriptions/sponsors') + .end((err, res) => { + expect(res).to.have.status(400); + done(); + }); + }); + }); + +}); + From e84dc50b4ca180dd19f5725ccfc054516ab118dd Mon Sep 17 00:00:00 2001 From: Kevin Lau Date: Tue, 16 Apr 2024 21:12:01 -0400 Subject: [PATCH 6/9] add frontend api service for page dec --- src/frontend/api/index.js | 4 +++- src/frontend/api/page-descriptions.js | 11 +++++++++++ src/frontend/hooks/sponsors.js | 2 +- src/frontend/hooks/teams.js | 2 +- src/frontend/pages/postings/forms/EditOpeningsForm.js | 5 ++--- src/frontend/pages/sponsors/hooks/sponsor-desc.js | 2 +- .../pages/team-descriptions/hooks/team-desc.js | 2 +- 7 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 src/frontend/api/page-descriptions.js diff --git a/src/frontend/api/index.js b/src/frontend/api/index.js index 85e794e..29d1b0d 100644 --- a/src/frontend/api/index.js +++ b/src/frontend/api/index.js @@ -7,6 +7,7 @@ import openingsDescription from './openings-description'; import sponsors from './sponsors'; import geeseInfo from './geese-info'; import blogs from './blogs'; +import pageDescriptions from './page-descriptions'; export default { google: google(server), @@ -16,5 +17,6 @@ export default { formUpload: formUpload(server), openingsDescription: openingsDescription(server), geeseInfo: geeseInfo(server), - blogs: blogs(server) + blogs: blogs(server), + pageDescriptions: pageDescriptions(server) }; diff --git a/src/frontend/api/page-descriptions.js b/src/frontend/api/page-descriptions.js new file mode 100644 index 0000000..ce441a9 --- /dev/null +++ b/src/frontend/api/page-descriptions.js @@ -0,0 +1,11 @@ +const getDescription = (server) => (key) => server.get(`/api/page-descriptions/${key}`); +const addDescription = (server) => () => + server.post(`/api/page-descriptions/`); +const editDescription = (server) => (key, updatedDescription) => + server.patch(`/api/page-descriptions/${key}`, updatedDescription); + +export default (server) => ({ + getDescription: getDescription(server), + addDescription: addDescription(server), + editDescription: editDescription(server), +}); diff --git a/src/frontend/hooks/sponsors.js b/src/frontend/hooks/sponsors.js index b9a0150..282e1ba 100644 --- a/src/frontend/hooks/sponsors.js +++ b/src/frontend/hooks/sponsors.js @@ -15,7 +15,7 @@ const useSponsors = () => { async () => { try { const sponsorTiers = await api.sponsors.getSponsorTiers(); - const sponsorDesc = await api.sponsors.getSponsorDesc(); + const sponsorDesc = await api.pageDescriptions.getDescription('sponsors'); const joinTierName = true; const response = await api.sponsors.getSponsors(joinTierName); diff --git a/src/frontend/hooks/teams.js b/src/frontend/hooks/teams.js index ec7bf4d..2d6aa3e 100644 --- a/src/frontend/hooks/teams.js +++ b/src/frontend/hooks/teams.js @@ -13,7 +13,7 @@ const useTeams = () => { const getTeams = useCallback(async () => { try { const teams = await api.teams.getTeams(); - const teamDesc = await api.teams.getTeamDesc(); + const teamDesc = await api.pageDescriptions.getDescription('team'); return { teams: teams.data, diff --git a/src/frontend/pages/postings/forms/EditOpeningsForm.js b/src/frontend/pages/postings/forms/EditOpeningsForm.js index d54ba25..a19abe5 100644 --- a/src/frontend/pages/postings/forms/EditOpeningsForm.js +++ b/src/frontend/pages/postings/forms/EditOpeningsForm.js @@ -56,7 +56,7 @@ const EditOpeningsForm = () => { }); useEffect(() => { - api.openingsDescription.getDescriptions().then((data) => { + api.pageDescriptions.getDescription('openings').then((data) => { if (!R.isEmpty(data.data)) { setformData(data.data); } @@ -76,8 +76,7 @@ const EditOpeningsForm = () => { }; const saveForm = () => { - api.openingsDescription - .updateDescriptions(formData) + api.pageDescriptions.editDescription('openings', formData) .then(() => history.push('/postings')); }; diff --git a/src/frontend/pages/sponsors/hooks/sponsor-desc.js b/src/frontend/pages/sponsors/hooks/sponsor-desc.js index 518a16b..01d4d2a 100644 --- a/src/frontend/pages/sponsors/hooks/sponsor-desc.js +++ b/src/frontend/pages/sponsors/hooks/sponsor-desc.js @@ -209,7 +209,7 @@ const useSponsorDescForm = (input = {}) => { images: imgStrings, }; - const res = await api.sponsors.updateSponsorDesc(data); + const res = await api.pageDescriptions.editDescription('sponsors', data); if (res.status !== 200) { throw new Error(res.data); diff --git a/src/frontend/pages/team-descriptions/hooks/team-desc.js b/src/frontend/pages/team-descriptions/hooks/team-desc.js index 97f6039..d40be37 100644 --- a/src/frontend/pages/team-descriptions/hooks/team-desc.js +++ b/src/frontend/pages/team-descriptions/hooks/team-desc.js @@ -193,7 +193,7 @@ const useTeamDescForm = (input = {}) => { images: imgStrings, }; - await api.teams.updateTeamDesc(data); + await api.pageDescriptions.editDescription('team', data); // onSuccess: closeForm(); From 80d65fda3488edd32f7e6d7c3fc5c03aedb66c1b Mon Sep 17 00:00:00 2001 From: Kevin Lau Date: Sun, 21 Apr 2024 21:15:43 -0400 Subject: [PATCH 7/9] fixed openings desc --- .../pages/postings/forms/EditOpeningsForm.js | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/frontend/pages/postings/forms/EditOpeningsForm.js b/src/frontend/pages/postings/forms/EditOpeningsForm.js index a19abe5..db8af91 100644 --- a/src/frontend/pages/postings/forms/EditOpeningsForm.js +++ b/src/frontend/pages/postings/forms/EditOpeningsForm.js @@ -56,13 +56,32 @@ const EditOpeningsForm = () => { }); useEffect(() => { - api.pageDescriptions.getDescription('openings').then((data) => { + api.pageDescriptions.getDescription('openings-active').then((data) => { + console.log('active', data.data); if (!R.isEmpty(data.data)) { - setformData(data.data); + setformData((prev) => ({ + ...prev, + active: { + heading: data.data.title, + body: data.data.description, + }, + })); + } + }); + + api.pageDescriptions.getDescription('openings-non-active').then((data) => { + console.log('non-active', data.data); + if (!R.isEmpty(data.data)) { + setformData((prev) => ({ + ...prev, + nonActive: { + heading: data.data.title, + body: data.data.description, + }, + })); } }); }, []); - const onChange = (type, name) => (text) => { const newState = { ...formData, @@ -76,7 +95,8 @@ const EditOpeningsForm = () => { }; const saveForm = () => { - api.pageDescriptions.editDescription('openings', formData) + api.pageDescriptions + .editDescription('openings', formData) .then(() => history.push('/postings')); }; From b5af858c8726b6b28dc08f765bea238262f7588b Mon Sep 17 00:00:00 2001 From: Kevin Lau Date: Mon, 22 Apr 2024 20:38:28 -0400 Subject: [PATCH 8/9] remove open desc --- src/backend/api/index.js | 2 - src/backend/api/openings-description/index.js | 40 ------------------- src/backend/db/index.js | 4 -- src/backend/db/openings-description.js | 18 --------- ...10324214004_openings-descriptions-table.js | 8 ---- src/frontend/api/index.js | 4 -- src/frontend/api/openings-description.js | 10 ----- src/frontend/api/page-descriptions.js | 11 ----- src/frontend/api/sponsors.js | 5 --- 9 files changed, 102 deletions(-) delete mode 100644 src/backend/api/openings-description/index.js delete mode 100644 src/backend/db/openings-description.js delete mode 100644 src/backend/migrations/20210324214004_openings-descriptions-table.js delete mode 100644 src/frontend/api/openings-description.js delete mode 100644 src/frontend/api/page-descriptions.js diff --git a/src/backend/api/index.js b/src/backend/api/index.js index 646e155..7e3761c 100644 --- a/src/backend/api/index.js +++ b/src/backend/api/index.js @@ -4,7 +4,6 @@ import postings from './postings'; import sponsors from './sponsors'; // Import entire folder to bind to sponsor URL router section. import upload from './file-upload/upload'; import geeseInfo from './geese-info'; -import openingsDescription from './openings-description'; import newsletter from './newsletter_recipient'; import blogs from './blogs'; import geeseFeatures from './geese-features'; @@ -18,7 +17,6 @@ router.use('/postings', postings); router.use('/sponsors', sponsors); router.use('/upload', upload); router.use('/geese-info', geeseInfo); -router.use('/openings-description', openingsDescription); router.use('/newsletter', newsletter); router.use('/blogs', blogs); router.use('/geese-features', geeseFeatures); diff --git a/src/backend/api/openings-description/index.js b/src/backend/api/openings-description/index.js deleted file mode 100644 index e169409..0000000 --- a/src/backend/api/openings-description/index.js +++ /dev/null @@ -1,40 +0,0 @@ -import express from 'express'; - -import db from '../../db'; - -const router = express.Router(); - -router.get('/', (req, res) => { - db.openingsDescription - .getDescriptions() - .then((data) => { - const result = { - active: data[0], - nonActive: data[1], - }; - res.status(200).json(result); - }) - .catch((err) => { - res.status(500).json({ message: err }); - }); -}); - -router.patch('/', (req, res) => { - const { active, nonActive } = req.body; - Promise.all([ - db.openingsDescription.updateDescription(true, active), - db.openingsDescription.updateDescription(false, nonActive), - ]) - .then((data) => { - const result = { - active: data[0][0], - nonActive: data[1][0], - }; - res.status(200).json(result); - }) - .catch((err) => { - res.status(500).json({ message: err }); - }); -}); - -export default router; diff --git a/src/backend/db/index.js b/src/backend/db/index.js index 4b9e430..ace3dc7 100644 --- a/src/backend/db/index.js +++ b/src/backend/db/index.js @@ -5,7 +5,6 @@ import teamDescriptors from './team-descriptors'; import postings from './postings'; import sponsors from './sponsors'; import geeseInfo from './geese-info'; -import openingsDescription from './openings-description'; import featurePermissions from './feature-permissions'; import newsletterRecipients from './newsletter-recipient'; import blogs from './blogs'; @@ -29,9 +28,6 @@ export default { geeseInfo: { ...geeseInfo(db), }, - openingsDescription: { - ...openingsDescription(db), - }, newsletterRecipients: { ...newsletterRecipients(db), }, diff --git a/src/backend/db/openings-description.js b/src/backend/db/openings-description.js deleted file mode 100644 index 579b072..0000000 --- a/src/backend/db/openings-description.js +++ /dev/null @@ -1,18 +0,0 @@ -const getDescriptions = (db) => () => - db.select(['heading', 'body']).from('openings_description'); - -const updateDescription = (db) => (active, changes) => - db('openings_description') - .where({ active }) - .update(changes) - .then(() => - db - .select('heading', 'body') - .from('openings_description') - .where({ active }) - ); - -export default (db) => ({ - getDescriptions: getDescriptions(db), - updateDescription: updateDescription(db), -}); diff --git a/src/backend/migrations/20210324214004_openings-descriptions-table.js b/src/backend/migrations/20210324214004_openings-descriptions-table.js deleted file mode 100644 index 7c0e7c6..0000000 --- a/src/backend/migrations/20210324214004_openings-descriptions-table.js +++ /dev/null @@ -1,8 +0,0 @@ -exports.up = (knex) => - knex.schema.createTable('openings_description', (table) => { - table.string('heading'); - table.text('body'); - table.boolean('active'); - }); - -exports.down = (knex) => knex.schema.dropTableIfExists('openings_description'); diff --git a/src/frontend/api/index.js b/src/frontend/api/index.js index 29d1b0d..5d4eb11 100644 --- a/src/frontend/api/index.js +++ b/src/frontend/api/index.js @@ -3,11 +3,9 @@ import postings from './postings'; import server from './server'; import teams from './teams'; import formUpload from './formUpload'; -import openingsDescription from './openings-description'; import sponsors from './sponsors'; import geeseInfo from './geese-info'; import blogs from './blogs'; -import pageDescriptions from './page-descriptions'; export default { google: google(server), @@ -15,8 +13,6 @@ export default { sponsors: sponsors(server), teams: teams(server), formUpload: formUpload(server), - openingsDescription: openingsDescription(server), geeseInfo: geeseInfo(server), blogs: blogs(server), - pageDescriptions: pageDescriptions(server) }; diff --git a/src/frontend/api/openings-description.js b/src/frontend/api/openings-description.js deleted file mode 100644 index b3fb32c..0000000 --- a/src/frontend/api/openings-description.js +++ /dev/null @@ -1,10 +0,0 @@ -const getDescriptions = (server) => () => - server.get('/api/openings-description'); - -const updateDescriptions = (server) => (data) => - server.patch(`/api/openings-description`, data); - -export default (server) => ({ - updateDescriptions: updateDescriptions(server), - getDescriptions: getDescriptions(server), -}); diff --git a/src/frontend/api/page-descriptions.js b/src/frontend/api/page-descriptions.js deleted file mode 100644 index ce441a9..0000000 --- a/src/frontend/api/page-descriptions.js +++ /dev/null @@ -1,11 +0,0 @@ -const getDescription = (server) => (key) => server.get(`/api/page-descriptions/${key}`); -const addDescription = (server) => () => - server.post(`/api/page-descriptions/`); -const editDescription = (server) => (key, updatedDescription) => - server.patch(`/api/page-descriptions/${key}`, updatedDescription); - -export default (server) => ({ - getDescription: getDescription(server), - addDescription: addDescription(server), - editDescription: editDescription(server), -}); diff --git a/src/frontend/api/sponsors.js b/src/frontend/api/sponsors.js index b2533e9..333deed 100644 --- a/src/frontend/api/sponsors.js +++ b/src/frontend/api/sponsors.js @@ -1,8 +1,5 @@ const getSponsorTiers = (server) => () => server.get(`/api/sponsors/tiers`); -const getSponsorDesc = (server) => () => server.get(`/api/sponsors/description`); -const updateSponsorDesc = (server) => (data) => server.patch(`/api/sponsors/description`, data); - //const getSponsors = (server) => () => server.get(`/api/sponsors/`); const getSponsors = (server) => (joinTierName = false) => server.get(`/api/sponsors${joinTierName ? '?joinTierName=true' : ''}`); @@ -13,8 +10,6 @@ const deleteSponsor = (server) => (id) => server.delete(`/api/sponsors/${id}`); export default (server) => ({ getSponsorTiers: getSponsorTiers(server), - getSponsorDesc: getSponsorDesc(server), - updateSponsorDesc: updateSponsorDesc(server), getSponsors: getSponsors(server), addSponsor: addSponsor(server), updateSponsor: updateSponsor(server), From dd1ff1e171c0f0b23e7a64800dd9138a71271dec Mon Sep 17 00:00:00 2001 From: Kevin Lau Date: Mon, 22 Apr 2024 20:50:56 -0400 Subject: [PATCH 9/9] remove team desc --- src/backend/api/sponsors/description/get.js | 12 --- .../api/sponsors/description/update.js | 22 ----- src/backend/api/sponsors/index.js | 13 --- .../api/team-descriptors/description/get.js | 13 --- .../team-descriptors/description/update.js | 23 ----- src/backend/api/team-descriptors/index.js | 18 ---- src/backend/db/sponsors.js | 50 +---------- src/backend/db/team-descriptors.js | 53 ----------- .../migrations/20210508110244_sponsor_desc.js | 15 ---- .../migrations/20210710143647_team_desc.js | 16 ---- src/backend/models/team-descriptors.js | 6 -- src/backend/seeds/06_sponsor_desc.js | 12 --- src/backend/seeds/08_team-desc.js | 13 --- .../tests/integration/sponsors.test.js | 81 ----------------- .../integration/team-descriptors.test.js | 87 ------------------- src/frontend/api/teams.js | 8 -- 16 files changed, 1 insertion(+), 441 deletions(-) delete mode 100644 src/backend/api/sponsors/description/get.js delete mode 100644 src/backend/api/sponsors/description/update.js delete mode 100644 src/backend/api/team-descriptors/description/get.js delete mode 100644 src/backend/api/team-descriptors/description/update.js delete mode 100644 src/backend/migrations/20210508110244_sponsor_desc.js delete mode 100644 src/backend/migrations/20210710143647_team_desc.js delete mode 100644 src/backend/seeds/06_sponsor_desc.js delete mode 100644 src/backend/seeds/08_team-desc.js diff --git a/src/backend/api/sponsors/description/get.js b/src/backend/api/sponsors/description/get.js deleted file mode 100644 index 10fd6b2..0000000 --- a/src/backend/api/sponsors/description/get.js +++ /dev/null @@ -1,12 +0,0 @@ -import db from '../../../db'; - -export default (req, res) => { - db.sponsors.getSponsorDesc() - .then((desc) => { - res.send(desc); - }) - .catch((err) => { - console.log(err); - res.sendStatus(500); - }); -} diff --git a/src/backend/api/sponsors/description/update.js b/src/backend/api/sponsors/description/update.js deleted file mode 100644 index 9ef4626..0000000 --- a/src/backend/api/sponsors/description/update.js +++ /dev/null @@ -1,22 +0,0 @@ -import db from '../../../db'; -import * as R from 'ramda'; - -export default (req, res) => { - const data = req.body; - - // Checks if there's an empty body in the request: Workaround for express-validator.js not being able to check for this. - if (R.isEmpty(data)) { - res.sendStatus(400); - return; - } - - db.sponsors.updateSponsorDesc(data) - .then((response) => { - console.log(response); - res.sendStatus(200); - }) - .catch((err) => { - console.log(`Could not update sponsor description: ${err}`); - res.sendStatus(500); - }); -} diff --git a/src/backend/api/sponsors/index.js b/src/backend/api/sponsors/index.js index 6627f2f..e4a0750 100644 --- a/src/backend/api/sponsors/index.js +++ b/src/backend/api/sponsors/index.js @@ -11,25 +11,12 @@ import getSponsors from './get-sponsors'; import add from './add'; import update from './update'; import del from './del'; -import getDesc from './description/get'; -import updateDesc from './description/update'; const router = express.Router(); // Sponsor tiers. router.get('/tiers', getTiers); -// Sponsor page description -router.get('/description', getDesc); - -router.patch('/description', [ - // Required - body('title').isString(), - body('description').isString(), - body('images').isArray() - -], validationCheck, updateDesc); - // Sponsors router.get('/', getSponsors); diff --git a/src/backend/api/team-descriptors/description/get.js b/src/backend/api/team-descriptors/description/get.js deleted file mode 100644 index 5fe4d6a..0000000 --- a/src/backend/api/team-descriptors/description/get.js +++ /dev/null @@ -1,13 +0,0 @@ -import db from '../../../db'; - -export default (req, res) => { - db.teamDescriptors - .getTeamDesc() - .then((response) => { - res.send(response).status(200); - }) - .catch((err) => { - console.log(err); - res.sendStatus(500); - }); -}; diff --git a/src/backend/api/team-descriptors/description/update.js b/src/backend/api/team-descriptors/description/update.js deleted file mode 100644 index 618aa73..0000000 --- a/src/backend/api/team-descriptors/description/update.js +++ /dev/null @@ -1,23 +0,0 @@ -import db from '../../../db'; -import * as R from 'ramda'; - -export default (req, res) => { - const data = req.body; - - // Checks if there's an empty body in the request: Workaround for express-validator.js not being able to check for this. - if (R.isEmpty(data)) { - res.sendStatus(400); - return; - } - - db.teamDescriptors - .updateTeamDesc(data) - .then((response) => { - console.log(response); - res.sendStatus(200); - }) - .catch((err) => { - console.log(`Could not update team description: ${err}`); - res.sendStatus(500); - }); -}; diff --git a/src/backend/api/team-descriptors/index.js b/src/backend/api/team-descriptors/index.js index b1bb8d1..e8a8c1c 100644 --- a/src/backend/api/team-descriptors/index.js +++ b/src/backend/api/team-descriptors/index.js @@ -3,8 +3,6 @@ import { param, body } from 'express-validator'; import validationCheck from '../../utils/validation-check'; import { validateRequest } from '../../google-auth'; -import getDesc from './description/get'; -import updateDesc from './description/update'; import getAll from './get-all'; import add from './add'; import update from './update'; @@ -12,22 +10,6 @@ import del from './del'; const router = express.Router(); -/* TEAMS PAGE DESCRIPTION */ - -router.get('/description', getDesc); - -router.patch( - '/description', - [ - body('title').isString(), - body('description').isString(), - body('images').isArray(), - ], - validationCheck, - validateRequest, - updateDesc, -); - /* TEAMS */ router.get('/', getAll); diff --git a/src/backend/db/sponsors.js b/src/backend/db/sponsors.js index 42f0988..b168346 100644 --- a/src/backend/db/sponsors.js +++ b/src/backend/db/sponsors.js @@ -114,51 +114,6 @@ const deleteSponsorById = (db) => (id) => db('sponsors') throw err; }); -/**SPONSOR DESCRIPTION API ENDPOINTS */ -const getSponsorDesc = (db) => () => db('sponsor_desc') - .where({ id: 1 }) - .first() // There should only be one entry in this table and it's id should be 1 - .then((res) => { - let images; // images array is stored as string in database, convert back to array: - try { - const resImages = res.images - if (typeof resImages === 'string') { - images = JSON.parse(res.images); - } else if (typeof resImages === 'object') { // If array already - images = resImages; - } - } catch (_) { - // Empty array in database is stringified to something that isn't JSON for some reason. - images = []; - } - - let body = { - ...res, - images: images - }; - delete body.id; // Since we should only have 1 entry. - return toSponsorDesc(body); - }) - .catch(err => { - console.error(`Error in getSponsorDesc: ${err}`); - throw err; - }); - -const updateSponsorDesc = (db) => (data) => db('sponsor_desc') - .update({ - ...data, - images: JSON.stringify(data.images) - }) - .where({ - id: 1, // There is only one item - }) - .then((response) => { - console.log(response); - return response; - }).catch(err => { - console.error(`Error in updateSponsorDesc: ${err}`); - throw err; - }); export default (db) => ({ getSponsorTiers: getSponsorTiers(db), @@ -167,8 +122,5 @@ export default (db) => ({ getSponsorsWithTierName: getSponsorsWithTierName(db), addSponsor: addSponsor(db), updateSponsorById: updateSponsorById(db), - deleteSponsorById: deleteSponsorById(db), - - getSponsorDesc: getSponsorDesc(db), - updateSponsorDesc: updateSponsorDesc(db) + deleteSponsorById: deleteSponsorById(db) }); diff --git a/src/backend/db/team-descriptors.js b/src/backend/db/team-descriptors.js index 6d305b3..b1a2886 100644 --- a/src/backend/db/team-descriptors.js +++ b/src/backend/db/team-descriptors.js @@ -36,63 +36,10 @@ const deleteTeamDescriptorById = (db) => (teamDescriptorId) => teamDescriptorId ); -/* TEAMS DESCRIPTION API ENDPOINTS */ - -const getTeamDesc = (db) => () => - db("team_desc") - .where({ id: 1 }) - .first() // There should only be one entry in this table and it's id should be 1 - .then((res) => { - let images; // images array is stored as string in database, convert back to array: - try { - const resImages = res.images; - if (typeof resImages === "string") { - images = JSON.parse(res.images); - } else if (typeof resImages === "object") { - // If array already - images = resImages; - } - } catch (_) { - // Empty array in database is stringified to something that isn't JSON for some reason. - images = []; - } - - let body = { - ...res, - images: images, - }; - delete body.id; // Since we should only have 1 entry. - console.log(res) - return toTeamDesc(body); - }) - .catch((err) => { - console.error(`Error in getTeamDesc: ${err}`); - throw err; - }); - -const updateTeamDesc = (db) => (data) => - db("team_desc") - .update({ - ...data, - images: JSON.stringify(data.images), - }) - .where({ - id: 1, // There is only one item - }) - .then((response) => { - console.log(response); - return response; - }) - .catch((err) => { - console.error(`Error in updateTeamDesc: ${err}`); - throw err; - }); export default (db) => ({ getTeamDescriptors: getTeamDescriptors(db), addTeamDescriptor: addTeamDescriptor(db), updateTeamDescriptorById: updateTeamDescriptorById(db), deleteTeamDescriptorById: deleteTeamDescriptorById(db), - getTeamDesc: getTeamDesc(db), - updateTeamDesc: updateTeamDesc(db), }); diff --git a/src/backend/migrations/20210508110244_sponsor_desc.js b/src/backend/migrations/20210508110244_sponsor_desc.js deleted file mode 100644 index 3a27012..0000000 --- a/src/backend/migrations/20210508110244_sponsor_desc.js +++ /dev/null @@ -1,15 +0,0 @@ -const { onUpdateTrigger } = require('../knexfile'); - -exports.up = (knex) => knex.schema.createTable("sponsor_desc", table => { - table.increments('id'); // For SQLite date auto-update trigger. - table.string("title").notNullable(); - table.string("description", 5000); // Raw HTML for rich text support. - table.json("images"); - - table.timestamps(true, true); // Add created_at and updated_at columns. -}) -.then(() => knex.raw(onUpdateTrigger('sponsor_desc'))) - -exports.down = function(knex) { - return knex.schema.dropTableIfExists("sponsor_desc") -}; diff --git a/src/backend/migrations/20210710143647_team_desc.js b/src/backend/migrations/20210710143647_team_desc.js deleted file mode 100644 index 5245d08..0000000 --- a/src/backend/migrations/20210710143647_team_desc.js +++ /dev/null @@ -1,16 +0,0 @@ -const { onUpdateTrigger } = require('../knexfile'); - -exports.up = (knex) => - knex.schema - .createTable('team_desc', (table) => { - table.increments('id'); // For SQLite date auto-update trigger. - table.string('title').notNullable(); - table.string('description', 5000); // Raw HTML for rich text support. - table.json('images'); - - table.timestamps(true, true); // Add created_at and updated_at columns. - }) - -exports.down = function (knex) { - return knex.schema.dropTableIfExists('team_desc'); -}; diff --git a/src/backend/models/team-descriptors.js b/src/backend/models/team-descriptors.js index 7dac490..ed3010a 100644 --- a/src/backend/models/team-descriptors.js +++ b/src/backend/models/team-descriptors.js @@ -7,9 +7,3 @@ export const toTeamDescriptor = (teamDescriptor) => }); export const toTeamDescriptors = R.map(toTeamDescriptor); - -export const toTeamDesc = (desc) => - renameProps(desc, { - created_at: 'createdAt', - updated_at: 'updatedAt', - }); diff --git a/src/backend/seeds/06_sponsor_desc.js b/src/backend/seeds/06_sponsor_desc.js deleted file mode 100644 index 4cc4b13..0000000 --- a/src/backend/seeds/06_sponsor_desc.js +++ /dev/null @@ -1,12 +0,0 @@ -const { ENV_IS_STAGING_OR_PROD } = require("../knexfile"); - -exports.seed = function(knex) { - // Deletes ALL existing entries - if (ENV_IS_STAGING_OR_PROD) return Promise.resolve(); - return knex('sponsor_desc').del() - .then(() => { - return knex('sponsor_desc').insert([ - { id: 1, title: "", description: "", images: JSON.stringify([])} - ]); - }); -}; diff --git a/src/backend/seeds/08_team-desc.js b/src/backend/seeds/08_team-desc.js deleted file mode 100644 index 08760fc..0000000 --- a/src/backend/seeds/08_team-desc.js +++ /dev/null @@ -1,13 +0,0 @@ -const { ENV_IS_STAGING_OR_PROD } = require('../knexfile'); - -exports.seed = function (knex) { - // Deletes ALL existing entries - if (ENV_IS_STAGING_OR_PROD) return Promise.resolve(); - return knex('team_desc') - .del() - .then(() => { - return knex('team_desc').insert([ - { id: 1, title: ' ', description: ' ', images: JSON.stringify([]) }, - ]); - }); -}; diff --git a/src/backend/tests/integration/sponsors.test.js b/src/backend/tests/integration/sponsors.test.js index 70d854e..32a1b1a 100644 --- a/src/backend/tests/integration/sponsors.test.js +++ b/src/backend/tests/integration/sponsors.test.js @@ -284,85 +284,4 @@ describe('Sponsor Routes', () => { }); }); }); - - /**SPONSOR DESCRIPTION API ENDPOINT */ - describe('GET /api/sponsors/description', () => { - it('should return page description entries when called', done => { - chai - .request(app) - .get('/api/sponsors/description') - .end((err, res) => { - expect(res).to.have.status(200); - if (res.error.text) { - console.error(res.error.text); - } - const sponsorDescription = res.body; - expect(sponsorDescription).to.have.keys([ - 'title', - 'description', - 'images', - 'createdAt', - 'updatedAt' - ]); - done(); - }); - }); - }); - - describe('PATCH /api/sponsors/description', () => { - it('should update page description entries when called', done => { - chai - .request(app) - .patch('/api/sponsors/description') - .send({ - title: 'This is a title updated', - description: 'This is a description updated', - images: ['image1.png', 'image2.png', 'image3.png'] - }) - .end((err, res) => { - expect(res).to.have.status(200); - if (res.error.text) { - console.error(res.error.text); - } - - chai.request(app) - .get('/api/sponsors/description') - .end((err2, res2) => { - expect(res2).to.have.status(200); - if (res2.error.text) { - console.error(res2.error.text); - } - - expect(res2.body).to.deep.include({ - title: 'This is a title updated', - description: 'This is a description updated', - images: ['image1.png', 'image2.png', 'image3.png'] - }); - done(); - }); - }); - }); - - it('should return 400 when body is missing', done => { - chai.request(app) - .patch('/api/sponsors/description') - .end((err, res) => { - expect(res).to.have.status(400); - done(); - }); - }); - - it('should return 400 when body is incomplete', done => { - chai.request(app) - .patch('/api/sponsors/description') - .send({ - title: 'This is a title updated', - images: ['image1.png', 'image2.png', 'image3.png'] - }) - .end((err, res) => { - expect(res).to.have.status(400); - done(); - }); - }); - }); }); diff --git a/src/backend/tests/integration/team-descriptors.test.js b/src/backend/tests/integration/team-descriptors.test.js index a96a379..b31e387 100644 --- a/src/backend/tests/integration/team-descriptors.test.js +++ b/src/backend/tests/integration/team-descriptors.test.js @@ -203,91 +203,4 @@ describe('Team Descriptor Routes', () => { }); }); }); - - /* TEAMS DESCRIPTION API ENDPOINT */ - - describe('GET /api/team-descriptors/description', () => { - it('should return page description entries when called', (done) => { - chai - .request(app) - .get('/api/team-descriptors/description') - .end((err, res) => { - expect(res).to.have.status(200); - if (res.error.text) { - console.error(res.error.text); - } - const teamDescription = res.body; - expect(teamDescription).to.have.keys([ - 'title', - 'description', - 'images', - 'updatedAt', - 'createdAt' - ]); - done(); - }); - }); - }); - - describe('PATCH /api/team-descriptors/description', () => { - it('should update page description entries when called', (done) => { - chai - .request(app) - .patch('/api/team-descriptors/description') - .send({ - title: 'This is a title updated', - description: 'This is a description updated', - images: ['image1.png', 'image2.png', 'image3.png'], - }) - .end((err, res) => { - if (res.error.text) { - console.error(res.error.text); - } - expect(res).to.have.status(200); - - chai - .request(app) - .get('/api/team-descriptors/description') - .end((err2, res2) => { - expect(res2).to.have.status(200); - if (res2.error.text) { - console.error(res2.error.text); - } - - expect(res2.body).to.have.property('updatedAt'); - expect(res2.body).to.have.property('createdAt'); - expect(res2.body).to.deep.include({ - title: 'This is a title updated', - description: 'This is a description updated', - images: ['image1.png', 'image2.png', 'image3.png'], - }); - done(); - }); - }); - }); - - it('should return 400 when body is missing', (done) => { - chai - .request(app) - .patch('/api/team-descriptors/description') - .end((err, res) => { - expect(res).to.have.status(400); - done(); - }); - }); - - it('should return 400 when body is incomplete', (done) => { - chai - .request(app) - .patch('/api/team-descriptors/description') - .send({ - title: 'This is a title updated', - images: ['image1.png', 'image2.png', 'image3.png'], - }) - .end((err, res) => { - expect(res).to.have.status(400); - done(); - }); - }); - }); }); diff --git a/src/frontend/api/teams.js b/src/frontend/api/teams.js index 14694dd..8d15fd9 100644 --- a/src/frontend/api/teams.js +++ b/src/frontend/api/teams.js @@ -9,17 +9,9 @@ const updateTeam = (server) => (data, id) => const deleteTeam = (server) => (id) => server.delete(`/api/team-descriptors/${id}`); -const getTeamDesc = (server) => () => - server.get("/api/team-descriptors/description"); - -const updateTeamDesc = (server) => (data) => - server.patch("/api/team-descriptors/description", data); - export default (server) => ({ getTeams: getTeams(server), addTeam: addTeam(server), updateTeam: updateTeam(server), deleteTeam: deleteTeam(server), - getTeamDesc: getTeamDesc(server), - updateTeamDesc: updateTeamDesc(server), });