/* 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) => { var 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() }) // ############################################################################ // ########################## 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() } } }) // ############################################################################ // ########################## 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