diff options
Diffstat (limited to 'backend/src/routes/users.js')
| -rw-r--r-- | backend/src/routes/users.js | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/backend/src/routes/users.js b/backend/src/routes/users.js new file mode 100644 index 0000000..6d874e9 --- /dev/null +++ b/backend/src/routes/users.js @@ -0,0 +1,65 @@ +import { Router } from 'express'; +import db from '../db.js'; + +const router = Router(); + +export const getUser = (userId) => { + const byId = db.prepare('SELECT * FROM users WHERE id = @userId'); + return byId.get({ userId }); +} + +router.get('/', (_req, res) => { + const listUsers = db.prepare(`SELECT * FROM users`) + const users = listUsers.all(); + res.json(users); +}); + +router.post('/new', (req, res) => { + const data = req.body; + const cols = Object.keys(data).join(' , '); + const vals = Object.values(data).join(' , '); + const insertUser = db.prepare(`INSERT INTO users(@cols) VALUES (@vals)`); + const { lastInsertRowid: id } = insertUser.run({ cols, vals }); + const user = getUser(id); + res.json(user); +}); + +router.get('/:id', (req, res) => { + const id = req.params.id; + const user = getUser(id); + if (!user) { + res.status(404).json({ error: 'User not found' }); + } + res.json(user); +}); + +router.patch('/:id', (req, res) => { + const userId = req.params.id; + const patch = req.body; + + const updateCol = db.prepare(` + UPDATE users SET @col = @val WHERE id = @userId + `); + const updateUser = db.transaction((patch) => { + for (const [col, val] of Object.entries(patch)) { + updateCol.run(col, val, userId); + }; + }); + + updateUser(Object.entries(patch)); + const updated = getUser(userId); + res.json(updated); +}); + +router.delete('/:id', (req, res) => { + const deleteUser = db.prepare(`DELETE FROM users WHERE id = @userId`) + const userId = parseInt(req.params.id); + const user = getUser(userId); + if (!user) { + res.status(404).json({ error: 'User not found' }); + } + deleteUser.run({ userId }); + res.json(user); +}); + +export default router; |
