summaryrefslogblamecommitdiffstats
path: root/server/api/events.js
blob: 23aeae77566cd0685687247c8122f760ccc34063 (plain) (tree)
































                                                                                                      


                                                                   
                              














                                                                                                                   





























                                                                                                                                                                                        
/* 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