/* global __appdir */ var path = require('path') var db = require(path.join(__appdir, 'lib', 'sequelize')) var groupUtil = require(path.join(__appdir, 'lib', 'grouputil')) var express = require('express') const { decorateApp } = require('@awaitjs/express') var router = decorateApp(express.Router()) // ############################################################################ // ########################### GET requests ################################# /* * @return: Returns event of given id. */ router.getAsync('/:id', async (req, res) => { var event = await db.event.findOne({ where: { id: req.params.id }, include: ['clients', 'groups'] }) if (event) res.send(event) else res.status(404).end() }) /* * @return: Returns a list of all events in the database. */ router.getAsync('', async (req, res) => { var events = await db.event.findAll({ include: ['clients', 'groups'] }) if (events) res.status(200).send(events) else res.status(404).end() }) // ############################################################################ // ########################## POST requests ################################# router.postAsync('/blacklist', async (req, res) => { if (req.body.groups) { var blacklist = await groupUtil.getAllChildren(req.body.groups) res.send(blacklist) } else res.status(404).end() }) // Create, Update or Delete POST router.postAsync(['', '/:id'], async (req, res) => { if (req.query.delete !== undefined && req.query.delete !== 'false') { await db.event.destroy({ where: { id: req.params.id || req.body.ids } }).then(count => { res.send({ count }) }) } else { var promises = [] var promisesBlacklist = [] var eventDb if (req.body.config.length !== 1) req.body.config = null if (req.body.times.length === 0) req.body.times = null if (req.params.id > 0) { // Update existing role eventDb = await db.event.findOne({ where: { id: req.params.id } }) if (eventDb !== null) { promises.push(eventDb.update({ name: req.body.name, description: req.body.description, config: req.body.config || null, times: req.body.times, important: req.body.important })) promises.push(eventDb.setGroups(req.body.groups, { through: { blacklist: 0 } })) promises.push(eventDb.setClients(req.body.clients, { through: { blacklist: 0 } })) await Promise.all(promises) promisesBlacklist.push(eventDb.addGroups(req.body.blacklistGroups, { through: { blacklist: 1 } })) promisesBlacklist.push(eventDb.addClients(req.body.blacklistClients, { through: { blacklist: 1 } })) await Promise.all(promisesBlacklist) res.send({ id: req.params.id }) } else { res.status(404).end() } } else { // Create new role eventDb = await db.event.create({ name: req.body.name, description: req.body.description, config: req.body.config || null, times: req.body.times, important: req.body.important }) promises.push(eventDb.setGroups(req.body.groups, { through: { blacklist: 0 } })) promises.push(eventDb.setClients(req.body.clients, { through: { blacklist: 0 } })) await Promise.all(promises) promisesBlacklist.push(eventDb.addGroups(req.body.blacklistGroups, { through: { blacklist: 1 } })) promisesBlacklist.push(eventDb.addClients(req.body.blacklistClients, { through: { blacklist: 1 } })) await Promise.all(promisesBlacklist) res.send({ id: req.body.id }) } } }) // ############################################################################ // ############################################################################ module.exports.router = router