From 5b59be3d0b2ae4f148a1d6c6f9781921c0e6042c Mon Sep 17 00:00:00 2001 From: Udo Walter Date: Sun, 31 Mar 2019 02:55:26 +0000 Subject: [server/groups] add more responses --- server/api/groups.js | 55 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 22 deletions(-) (limited to 'server/api') diff --git a/server/api/groups.js b/server/api/groups.js index 9a17c92..97e4808 100644 --- a/server/api/groups.js +++ b/server/api/groups.js @@ -1,11 +1,12 @@ /* global __appdir */ -var path = require('path') -var db = require(path.join(__appdir, 'lib', 'sequelize')) -var groupUtil = require(path.join(__appdir, 'lib', 'grouputil')) +const path = require('path') +const db = require(path.join(__appdir, 'lib', 'sequelize')) +const groupUtil = require(path.join(__appdir, 'lib', 'grouputil')) const ipHelper = require(path.join(__appdir, 'lib', 'iphelper')) -var express = require('express') +const express = require('express') const { decorateApp } = require('@awaitjs/express') -var router = decorateApp(express.Router()) +const router = decorateApp(express.Router()) +const httpResponse = require(path.join(__appdir, 'lib', 'httpresponse')) // ############################################################################ // ########################### GET requests ################################# @@ -28,14 +29,16 @@ router.getAsync('/:id', async (req, res) => { if (all) res.status(200).send({ ...group.get({ plain: true }), ...await groupUtil.getAllChildren([group]) }) else res.status(200).send(group) } else { - res.status(404).end() + return httpResponse.notFound(res, req.params.id) } - } else { + } else if (req.params.id === '0') { const [subgroups, clients] = await Promise.all([ db.group.findAll(all ? {} : { where: { '$parents.id$': null }, include: ['parents'] }), db.client.findAll(all ? {} : { where: { '$groups.id$': null }, include: ['groups'] }) ]) res.send({ id: 0, subgroups, clients }) + } else { + httpResponse.invalidId(res, true) } }) @@ -44,14 +47,21 @@ router.getAsync('/:id', async (req, res) => { router.postAsync(['', '/:id'], async (req, res) => { if (req.query.delete !== undefined && req.query.delete !== 'false') { + if (!Array.isArray(req.body.ids)) return httpResponse.invalidBodyValue(res, 'ids', 'an array') const count = await db.group.destroy({ where: { id: req.body.ids } }) - res.status(200).send({ count }) + httpResponse.successBatch(res, 'deleted', 'group', count) } else { let group - if (req.params.id === undefined) group = await db.group.create(req.body.data) - else { + let action = 'updated' + if (req.params.id === undefined) { + group = await db.group.create(req.body.data) + action = 'created' + } else if (req.params.id > 0) { group = await db.group.findOne({ where: { id: req.params.id }, include: ['ipranges'] }) - if (group) await group.update(req.body.data) + if (!group) return httpResponse.notFound(res, req.params.id) + else await group.update(req.body.data) + } else { + return httpResponse.invalidId(res) } if (group) { const promises = [] @@ -87,40 +97,40 @@ router.postAsync(['', '/:id'], async (req, res) => { } } await Promise.all(promises) - res.status(200).send({ id: group.id }) - } else { - res.status(404).end() + httpResponse.success(res, action, 'group', group.id) } } }) router.postAsync('/:id/subgroups', async (req, res) => { + if (!(req.params.id > 0)) return httpResponse.invalidId(res) const group = await db.group.findOne({ where: { id: req.params.id } }) if (group) { if (req.query.delete !== undefined && req.query.delete !== 'false') { const count = await group.removeSubgroups(req.body.ids) - res.status(200).send({ count }) + httpResponse.successBatch(res, 'removed', 'subgroup', count) } else { const count = await group.addSubgroups(req.body.ids) - res.status(200).send({ count }) + httpResponse.successBatch(res, 'added', 'subgroup', count) } } else { - res.status(404).end() + httpResponse.notFound(res, req.params.id) } }) router.postAsync('/:id/clients', async (req, res) => { + if (!(req.params.id > 0)) return httpResponse.invalidId(res) const group = await db.group.findOne({ where: { id: req.params.id } }) if (group) { if (req.query.delete !== undefined && req.query.delete !== 'false') { const count = await group.removeClients(req.body.ids) - res.status(200).send({ count }) + httpResponse.successBatch(res, 'removed', 'client', count) } else { const count = await group.addClients(req.body.ids) - res.status(200).send({ count }) + httpResponse.successBatch(res, 'added', 'client', count) } } else { - res.status(404).end() + httpResponse.notFound(res, req.params.id) } }) @@ -128,9 +138,10 @@ router.postAsync('/:id/clients', async (req, res) => { // ########################## DELETE requests ############################### router.delete('/:id', async (req, res) => { + if (!(req.params.id > 0)) return httpResponse.invalidId(res) const count = await db.group.destroy({ where: { id: req.params.id } }) - if (count) res.status(200).end() - else res.status(404).end() + if (count) httpResponse.success(res, 'deleted', 'group', req.params.id) + else httpResponse.notFound(res, req.params.id) }) // ############################################################################ -- cgit v1.2.3-55-g7522