From ad56954ff556272e37ea0503778c07fcf3a09578 Mon Sep 17 00:00:00 2001 From: Matt Ball Date: Wed, 29 Nov 2023 17:14:18 -0800 Subject: [PATCH] support bulk actions across endpoints --- routes/create.js | 24 ++++++++++++++++++++---- routes/delete.js | 8 ++++---- routes/read.js | 10 ++++++++-- routes/update.js | 2 +- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/routes/create.js b/routes/create.js index 261361d..06e0d63 100644 --- a/routes/create.js +++ b/routes/create.js @@ -5,10 +5,26 @@ const router = express.Router() router.post('/', createUser) async function createUser(req, res) { - const user = new User(req.body) - const resp = await user.save() - const { password, ...keep } = resp._doc - res.json(keep) + let body = req.body + const singleUser = !Array.isArray(body) + + if (singleUser) { + body = [body] + } + + const users = body.map(user => new User(user)) + const response = await User.create(users) + + if (singleUser) { + const { password, ...body } = response[0]._doc; + res.json(body) + } else { + const body = response.map(doc => { + const { password, ...keep } = doc._doc + return keep + }) + res.json(body) + } } module.exports = router diff --git a/routes/delete.js b/routes/delete.js index c4a5998..3d5ed21 100644 --- a/routes/delete.js +++ b/routes/delete.js @@ -5,9 +5,9 @@ const router = express.Router() router.delete('/', deleteUser) async function deleteUser(req, res) { - const { id } = req.query - const user = await User.findByIdAndDelete(id) - res.json(user) + const ids = req.query.ids.split(',') + const deletedUsers = await User.deleteMany({ _id: { $in: ids }}) + res.json(deletedUsers) } -module.exports = router \ No newline at end of file +module.exports = router diff --git a/routes/read.js b/routes/read.js index 0b29355..c06b79d 100644 --- a/routes/read.js +++ b/routes/read.js @@ -6,8 +6,14 @@ router.get('/', getUser) async function getUser(req, res) { const { id } = req.query - const user = await User.findById(id) - res.json(user) + + if (id) { + const user = await User.findById(id) + res.json(user) + } else { + const users = await User.find() + res.json(users) + } } module.exports = router diff --git a/routes/update.js b/routes/update.js index 3f5293b..ca34279 100644 --- a/routes/update.js +++ b/routes/update.js @@ -6,7 +6,7 @@ router.patch('/', updateUser) async function updateUser(req, res) { const { id } = req.query - const user = await User.findByIdAndUpdate(id, req.body, { new: true }) + const user = await User.findByIdAndUpdate(id, req.body, { new: true }) // returns the updated user res.json(user) }