summaryrefslogtreecommitdiffstats
path: root/server/api/events.js
diff options
context:
space:
mode:
authorChristian Hofmaier2019-03-24 17:02:18 +0100
committerChristian Hofmaier2019-03-24 17:02:18 +0100
commit1ee0e6c1d7484930387438b7ebb15340595b5383 (patch)
treecff87a96c777b9fee0c3e066d1bd6d88763f1915 /server/api/events.js
parent[webapp] small design fixes (diff)
downloadbas-1ee0e6c1d7484930387438b7ebb15340595b5383.tar.gz
bas-1ee0e6c1d7484930387438b7ebb15340595b5383.tar.xz
bas-1ee0e6c1d7484930387438b7ebb15340595b5383.zip
[eventmanager] Add module and functionality
- list to show all events, buttons to create/delete events - can add groups/clients to event - can add blacklist to event
Diffstat (limited to 'server/api/events.js')
-rw-r--r--server/api/events.js86
1 files changed, 86 insertions, 0 deletions
diff --git a/server/api/events.js b/server/api/events.js
new file mode 100644
index 0000000..96bf15e
--- /dev/null
+++ b/server/api/events.js
@@ -0,0 +1,86 @@
+/* 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) => {
+ console.log('body: ' + req.body.groups)
+ 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 } })
+ console.log('Blacklist: ' + req.body.blacklistGroups)
+ console.log('Groups: ' + req.body.groups)
+ 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