Skip to content

Commit 4bd6f5b

Browse files
committed
Merge branch 'dev' into 21-set-up-nodemailer-backend
2 parents 4ec8369 + a2965f7 commit 4bd6f5b

File tree

6 files changed

+169
-52
lines changed

6 files changed

+169
-52
lines changed

app.js

+8
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,13 @@ const cors = require('cors');
33

44
require('dotenv').config();
55

6+
// routes
7+
const users = require('./routes/users');
8+
69
const app = express();
710

11+
const catalogRouter = require('./routes/catalog');
12+
813
const PORT = process.env.PORT || 3001;
914

1015
app.use(
@@ -15,6 +20,9 @@ app.use(
1520

1621
// add all routes under here
1722
app.use(express.json()); // for req.body
23+
app.use('/users', users);
24+
25+
app.use('/catalog', catalogRouter);
1826

1927
app.listen(PORT, () => {
2028
console.log(`Server listening on ${PORT}`);

routes/catalog.js

+92
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
const express = require('express');
2+
3+
const { db } = require('../server/db');
4+
5+
const catalogRouter = express.Router();
6+
const { keysToCamel } = require('../common/utils');
7+
8+
// -- GET - Returns all data from the catalog table
9+
catalogRouter.get('/', async (req, res) => {
10+
try {
11+
const allInfo = await db.query(`SELECT * from catalog;`);
12+
res.status(200).json(keysToCamel(allInfo));
13+
} catch (err) {
14+
res.status(500).send(err.message);
15+
}
16+
});
17+
18+
// -- GET/:id - Returns the row that matches the id
19+
catalogRouter.get('/:id', async (req, res) => {
20+
try {
21+
const { id } = req.params;
22+
const allUsers = await db.query(`SELECT * FROM catalog WHERE id = $1;`, [id]);
23+
res.status(200).json(keysToCamel(allUsers));
24+
} catch (err) {
25+
res.status(500).send(err.message);
26+
}
27+
});
28+
29+
// -- POST - Adds a new row to the catalog table
30+
catalogRouter.post('/', async (req, res) => {
31+
const { id, host, title, eventType, subject, description, year } = req.body;
32+
try {
33+
await db.query(
34+
`INSERT INTO catalog (id, host, title, event_type, subject, description, year)
35+
VALUES ($1, $2, $3, $4, $5, $6, $7);`,
36+
[id, host, title, eventType, subject, description, year],
37+
);
38+
res.status(201).json({ id, status: 'Success' });
39+
} catch (err) {
40+
res.status(500).json({
41+
status: 'Failed',
42+
msg: err.message,
43+
});
44+
}
45+
});
46+
47+
// -- PUT - Updates an existing row given an id
48+
// -- All fields are optional
49+
catalogRouter.put('/:id', async (req, res) => {
50+
try {
51+
const { id } = req.params;
52+
const { host, title, eventType, subject, description, year } = req.body;
53+
54+
const updatedCatalog = await db.query(
55+
`UPDATE catalog SET
56+
${host ? 'host = $(host), ' : ''}
57+
${title ? 'title = $(title),' : ''}
58+
${eventType ? 'event_type = $(eventType), ' : ''}
59+
${subject ? 'subject = $(subject), ' : ''}
60+
${description ? 'description = $(description), ' : ''}
61+
${year ? 'year = $(year), ' : ''}
62+
id = '${id}'
63+
WHERE id = '${id}'
64+
RETURNING *;`,
65+
{
66+
host,
67+
title,
68+
eventType,
69+
subject,
70+
description,
71+
year,
72+
id,
73+
},
74+
);
75+
res.status(200).send(keysToCamel(updatedCatalog));
76+
} catch (err) {
77+
res.status(500).send(err.message);
78+
}
79+
});
80+
81+
// -- DELETE - deletes an existing row given an id
82+
catalogRouter.delete('/:id', async (req, res) => {
83+
try {
84+
const { id } = req.params;
85+
const delUser = await db.query(`DELETE FROM catalog WHERE id = $1 RETURNING *;`, [id]);
86+
res.status(200).send(keysToCamel(delUser));
87+
} catch (err) {
88+
res.status(500).send(err.message);
89+
}
90+
});
91+
92+
module.exports = catalogRouter;

routes/users.js

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
const express = require('express');
2+
const { keysToCamel } = require('../common/utils');
3+
const { db } = require('../server/db');
4+
5+
const userRouter = express.Router();
6+
7+
userRouter.get('/', async (req, res) => {
8+
try {
9+
const allUsers = await db.query(`SELECT * FROM users;`);
10+
res.status(200).json(keysToCamel(allUsers));
11+
} catch (err) {
12+
res.status(500).send(err.message);
13+
}
14+
});
15+
16+
userRouter.get('/pending-accounts', async (req, res) => {
17+
try {
18+
const pendingAccounts = await db.query(`SELECT * FROM users WHERE approved = FALSE;`);
19+
res.status(200).json(keysToCamel(pendingAccounts));
20+
} catch (err) {
21+
res.status(500).send(err.message);
22+
}
23+
});
24+
25+
userRouter.post('/', async (req, res) => {
26+
try {
27+
const { id, email, type, approved } = req.body;
28+
await db.query(`INSERT INTO users (id, email, "type", approved) VALUES ($1, $2, $3, $4);`, [
29+
id,
30+
email,
31+
type,
32+
approved,
33+
]);
34+
res.status(201).json({
35+
id,
36+
});
37+
} catch (err) {
38+
res.status(500).json({
39+
status: 'Failed',
40+
msg: err.message,
41+
});
42+
}
43+
});
44+
45+
userRouter.put('/:uid', async (req, res) => {
46+
try {
47+
const { uid } = req.params;
48+
const updatedApproval = await db.query(
49+
`UPDATE users SET approved = TRUE WHERE id = $1 RETURNING *;`,
50+
[uid],
51+
);
52+
return res.status(200).send(keysToCamel(updatedApproval));
53+
} catch (err) {
54+
return res.status(500).send(err.message);
55+
}
56+
});
57+
58+
userRouter.delete('/:uid', async (req, res) => {
59+
try {
60+
const { uid } = req.params;
61+
const deletedUser = await db.query(`DELETE FROM users WHERE id = $1 RETURNING *;`, [uid]);
62+
res.status(200).send(keysToCamel(deletedUser));
63+
} catch (err) {
64+
res.status(500).send(err.message);
65+
}
66+
});
67+
68+
module.exports = userRouter;

server/queries/catalog.sql

-22
This file was deleted.

server/queries/users.sql

-29
This file was deleted.

yarn.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -2497,4 +2497,4 @@ yallist@^4.0.0:
24972497
yaml@^1.10.0:
24982498
version "1.10.2"
24992499
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
2500-
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
2500+
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==

0 commit comments

Comments
 (0)