From 8a4383885cb6bc19a2ce16bbad31ff0beada5ae2 Mon Sep 17 00:00:00 2001 From: Udo Walter Date: Sat, 30 Mar 2019 21:49:02 +0000 Subject: [server] configurator api -> ipxeconfigs and ipxeentries api; [webapp] ui polishing --- server/api/configurator.js | 129 --------------------------------------------- server/api/ipxeconfigs.js | 115 ++++++++++++++++++++++++++++++++++++++++ server/api/ipxeentries.js | 56 ++++++++++++++++++++ 3 files changed, 171 insertions(+), 129 deletions(-) delete mode 100644 server/api/configurator.js create mode 100644 server/api/ipxeconfigs.js create mode 100644 server/api/ipxeentries.js (limited to 'server/api') diff --git a/server/api/configurator.js b/server/api/configurator.js deleted file mode 100644 index 4ae1f35..0000000 --- a/server/api/configurator.js +++ /dev/null @@ -1,129 +0,0 @@ -/* global __appdir */ -var path = require('path') -var db = require(path.join(__appdir, 'lib', 'sequelize')) -var express = require('express') -const { decorateApp } = require('@awaitjs/express') -var router = decorateApp(express.Router()) - -// ############################################################################ -// ########################### GET requests ################################# - -router.getAsync('/configs', async (req, res) => { - const configs = await db.config.findAll({ order: [['name', 'ASC']] }) - res.status(200).send(configs) -}) - -router.getAsync('/entries', async (req, res) => { - const entries = await db.entry.findAll({ order: [['name', 'ASC']] }) - res.status(200).send(entries) -}) - -router.getAsync('/configs/:id/entries', async (req, res) => { - const config = await db.config.findOne({ - where: { id: req.params.id }, - include: ['entries'], - order: [[db.config.associations.entries, db.config.associations.entries.through, 'sortValue', 'ASC']] - }) - if (config) res.status(200).send(config.entries) - else res.status(404).end() -}) - -router.getAsync('/configs/:id/groups', async (req, res) => { - const config = await db.config.findOne({ where: { id: req.params.id }, include: ['groups'] }) - if (config) res.status(200).send(config.groups) - else res.status(404).end() -}) - -router.getAsync('/configs/:id/clients', async (req, res) => { - const config = await db.config.findOne({ where: { id: req.params.id }, include: ['clients'] }) - if (config) res.status(200).send(config.clients) - else res.status(404).end() -}) - -// ############################################################################ -// ########################## POST requests ################################# - -router.postAsync(['/configs', '/configs/:id'], async (req, res) => { - if (req.query.delete !== undefined && req.query.delete !== 'false') { - const count = await db.config.destroy({ where: { id: req.body.ids } }) - res.status(200).send({ count }) - } else { - let config - if (req.params.id === undefined) config = await db.config.create(req.body.data) - else { - config = await db.config.findOne({ where: { id: req.params.id } }) - if (config) await config.update(req.body.data) - } - if (config) { - await config.setEntries([]) - if (req.body.entries.length > 0) { - const promises = [] - req.body.entries.forEach((entry, index) => { - promises.push(config.addEntry(entry.id, { through: { sortValue: index, customName: entry.customName, keyBind: entry.keyBind } })) - }) - await Promise.all(promises) - } - res.status(200).send({ id: config.id }) - } else { - res.status(404).end() - } - } -}) - -router.postAsync(['/entries', '/entries/:id'], async (req, res) => { - if (req.query.delete !== undefined && req.query.delete !== 'false') { - const count = await db.entry.destroy({ where: { id: req.body.ids } }) - res.status(200).send({ count }) - } else { - let entry - if (req.params.id === undefined) entry = await db.entry.create(req.body.data) - else { - entry = await db.entry.findOne({ where: { id: req.params.id } }) - if (entry) await entry.update(req.body.data) - } - if (entry) { - res.status(200).send({ id: entry.id }) - } else { - res.status(404).end() - } - } -}) - -// ############################################################################ -// ########################## POST requests ################################# - -router.putAsync('/configs/:id/groups', async (req, res) => { - const config = await db.config.findOne({ where: { id: req.params.id } }) - if (config) { - await config.setGroups(req.body.ids) - res.status(200).end() - } else { res.status(404).end() } -}) - -router.putAsync('/configs/:id/clients', async (req, res) => { - const config = await db.config.findOne({ where: { id: req.params.id } }) - if (config) { - await config.setClients(req.body.ids) - res.status(200).end() - } else { res.status(404).end() } -}) - -// ############################################################################ -// ########################## DELETE requests ############################### - -router.deleteAsync('/configs/:id', async (req, res) => { - const count = await db.config.destroy({ where: { id: req.params.id } }) - if (count) res.status(200).end() - else res.status(404).end() -}) - -router.deleteAsync('/entries/:id', async (req, res) => { - const count = await db.entry.destroy({ where: { id: req.params.id } }) - if (count) res.status(200).end() - else res.status(404).end() -}) - -// ############################################################################ -// ############################################################################ - -module.exports.router = router diff --git a/server/api/ipxeconfigs.js b/server/api/ipxeconfigs.js new file mode 100644 index 0000000..a53e7ae --- /dev/null +++ b/server/api/ipxeconfigs.js @@ -0,0 +1,115 @@ +/* global __appdir */ +var path = require('path') +var Sequelize = require('sequelize') +var db = require(path.join(__appdir, 'lib', 'sequelize')) +var express = require('express') +const { decorateApp } = require('@awaitjs/express') +var router = decorateApp(express.Router()) + +// ############################################################################ +// ########################### GET requests ################################# + +router.getAsync('', async (req, res) => { + const configs = await db.config.findAll({ + include: [{ association: 'groups', attributes: [] }, { association: 'clients', attributes: [] }], + attributes: { + include: [ + [Sequelize.fn('COUNT', Sequelize.col('groups.id')), 'groupCount'], + [Sequelize.fn('COUNT', Sequelize.col('clients.id')), 'clientCount'] + ] + }, + group: ['id'] + }) + res.status(200).send(configs) +}) + +router.getAsync('/:id', async (req, res) => { + const config = await db.config.findOne({ where: { id: req.params.id }, include: ['groups', 'clients'] }) + if (config) res.status(200).send(config) + else res.status(404).end() +}) + +router.getAsync('/:id/entries', async (req, res) => { + const config = await db.config.findOne({ + where: { id: req.params.id }, + include: ['entries'], + order: [[db.config.associations.entries, db.config.associations.entries.through, 'sortValue', 'ASC']] + }) + if (config) res.status(200).send(config.entries) + else res.status(404).end() +}) + +router.getAsync('/:id/groups', async (req, res) => { + const config = await db.config.findOne({ where: { id: req.params.id }, include: ['groups'] }) + if (config) res.status(200).send(config.groups) + else res.status(404).end() +}) + +router.getAsync('/:id/clients', async (req, res) => { + const config = await db.config.findOne({ where: { id: req.params.id }, include: ['clients'] }) + if (config) res.status(200).send(config.clients) + else res.status(404).end() +}) + +// ############################################################################ +// ########################## POST requests ################################# + +router.postAsync(['', '/:id'], async (req, res) => { + if (req.query.delete !== undefined && req.query.delete !== 'false') { + const count = await db.config.destroy({ where: { id: req.body.ids } }) + res.status(200).send({ count }) + } else { + let config + if (req.params.id === undefined) config = await db.config.create(req.body.data) + else { + config = await db.config.findOne({ where: { id: req.params.id } }) + if (config) await config.update(req.body.data) + } + if (config) { + await config.setEntries([]) + if (req.body.entries.length > 0) { + const promises = [] + req.body.entries.forEach((entry, index) => { + promises.push(config.addEntry(entry.id, { through: { sortValue: index, customName: entry.customName, keyBind: entry.keyBind } })) + }) + await Promise.all(promises) + } + res.status(200).send({ id: config.id }) + } else { + res.status(404).end() + } + } +}) + +// ############################################################################ +// ########################### PUT requests ################################# + +router.putAsync('/:id/groups', async (req, res) => { + const config = await db.config.findOne({ where: { id: req.params.id } }) + if (config) { + await config.setGroups(req.body.ids) + res.status(200).end() + } else { res.status(404).end() } +}) + +router.putAsync('/:id/clients', async (req, res) => { + const config = await db.config.findOne({ where: { id: req.params.id } }) + if (config) { + await config.setClients(req.body.ids) + res.status(200).end() + } else { res.status(404).end() } +}) + +// ############################################################################ +// ########################## DELETE requests ############################### + +router.deleteAsync('/:id', async (req, res) => { + const count = await db.config.destroy({ where: { id: req.params.id } }) + if (count) res.status(200).end() + else res.status(404).end() +}) + +// ############################################################################ +// ############################################################################ + +module.exports.router = router diff --git a/server/api/ipxeentries.js b/server/api/ipxeentries.js new file mode 100644 index 0000000..25cfd21 --- /dev/null +++ b/server/api/ipxeentries.js @@ -0,0 +1,56 @@ +/* global __appdir */ +var path = require('path') +var db = require(path.join(__appdir, 'lib', 'sequelize')) +var express = require('express') +const { decorateApp } = require('@awaitjs/express') +var router = decorateApp(express.Router()) + +// ############################################################################ +// ########################### GET requests ################################# + +router.getAsync('', async (req, res) => { + const entries = await db.entry.findAll() + res.status(200).send(entries) +}) + +router.getAsync('/:id', async (req, res) => { + const entry = await db.entry.findOne({ where: { id: req.params.id }}) + if (entry) res.status(200).send(entry) + else res.status(404).end() +}) + +// ############################################################################ +// ########################## POST requests ################################# + +router.postAsync(['', '/:id'], async (req, res) => { + if (req.query.delete !== undefined && req.query.delete !== 'false') { + const count = await db.entry.destroy({ where: { id: req.body.ids } }) + res.status(200).send({ count }) + } else { + let entry + if (req.params.id === undefined) entry = await db.entry.create(req.body.data) + else { + entry = await db.entry.findOne({ where: { id: req.params.id } }) + if (entry) await entry.update(req.body.data) + } + if (entry) { + res.status(200).send({ id: entry.id }) + } else { + res.status(404).end() + } + } +}) + +// ############################################################################ +// ########################## DELETE requests ############################### + +router.deleteAsync('/:id', async (req, res) => { + const count = await db.entry.destroy({ where: { id: req.params.id } }) + if (count) res.status(200).end() + else res.status(404).end() +}) + +// ############################################################################ +// ############################################################################ + +module.exports.router = router -- cgit v1.2.3-55-g7522