From ed22ad23b9fcca1c77433bb3ca0ba503a3bde152 Mon Sep 17 00:00:00 2001 From: cv <34649812+cpvalente@users.noreply.github.com> Date: Sat, 17 Apr 2021 13:23:43 +0200 Subject: [PATCH] integrate db and playback --- server/app.js | 19 ++++++++++- server/classes/EventTimer.js | 13 +++++++ server/config.json | 4 +++ server/controllers/eventsController.js | 47 +++++++++++++++++++------- 4 files changed, 70 insertions(+), 13 deletions(-) diff --git a/server/app.js b/server/app.js index 8e8eb1148..7f0155601 100644 --- a/server/app.js +++ b/server/app.js @@ -1,6 +1,16 @@ // get config const config = require('./config.json'); +// init database +const low = require('lowdb'); +const FileSync = require('lowdb/adapters/FileSync'); +const adapter = new FileSync(config.database.filename); +const db = low(adapter); +db.defaults({ events: [] }).write(); + +// export db +module.exports.db = db; + // dependencies const express = require('express'); const http = require('http'); @@ -14,9 +24,11 @@ const playbackRouter = require('./routes/playbackRouter.js'); const port = process.env.PORT || config.server.port; // Global Objects -const eventlist = require('./data/eventsData.json'); const EventTimer = require('./classes/EventTimer.js'); +// get data (if any) +const eventlist = db.get('events').sortBy('order').value(); + // init timer global.timer = new EventTimer(); timer.setupWithEventList(eventlist); @@ -38,6 +50,11 @@ app.use(express.json()); app.use('/events', eventsRouter); app.use('/playback', playbackRouter); +// implement general router +app.get('/', function (req, res) { + res.send('ontime API'); +}); + // Implement route for errors app.use((err, req, res, next) => { console.error(err.stack); diff --git a/server/classes/EventTimer.js b/server/classes/EventTimer.js index e1cd28343..e4703997b 100644 --- a/server/classes/EventTimer.js +++ b/server/classes/EventTimer.js @@ -50,6 +50,19 @@ class EventTimer extends Timer { this.loadEvent(0); } + updateEventList(eventlist) { + // filter only events + const events = eventlist.filter((e) => e.type === 'event'); + + const numEvents = events.length; + + // set general + this._eventList = events; + this.numEvents = numEvents; + + // TODO: What to do about reloading + } + loadEvent(eventIndex) { // set event specific const e = this._eventList[eventIndex]; diff --git a/server/config.json b/server/config.json index 93f49f264..8287c70dc 100644 --- a/server/config.json +++ b/server/config.json @@ -4,5 +4,9 @@ }, "server": { "port": 4001 + }, + "database": { + "filename": "db.json", + "tablename": "events" } } \ No newline at end of file diff --git a/server/controllers/eventsController.js b/server/controllers/eventsController.js index 750ecbdce..359bf8710 100644 --- a/server/controllers/eventsController.js +++ b/server/controllers/eventsController.js @@ -1,15 +1,5 @@ -// CONST -const filename = 'db.json'; -const tableName = 'events'; -const countfield = 'eventCount'; - -// data -const low = require('lowdb'); -const FileSync = require('lowdb/adapters/FileSync'); -const adapter = new FileSync('db.json'); -const db = low(adapter); - -db.defaults({ events: [] }).write(); +// get database +const db = require('../app.js').db; // utils const { nanoid } = require('nanoid'); @@ -44,6 +34,20 @@ function _removeById(eventId) { return db.get('events').remove({ id: eventId }).write(); } +function getEventEvents() { + return db + .get('events') + .chain() + .filter({ type: 'event' }) + .sortBy('order') + .value(); +} + +function _updateTimers() { + const results = getEventEvents(); + global.timer.updateEventList(results); +} + // Create controller for GET request to '/events' // Returns - exports.eventsGetAll = async (req, res) => { @@ -98,9 +102,14 @@ exports.eventsPost = async (req, res) => { // add new event _pushNew(newEvent); + // update timer + // TODO: update single values when possible + _updateTimers(); + res.sendStatus(201); } catch (error) { res.status(400).send(error); + console.log('debug', error); } }; @@ -110,12 +119,16 @@ exports.eventsPut = async (req, res) => { // no valid params if (!req.body) { res.status(400).send(`No object found`); + console.log('error here', 'noobj'); + return; } let eventId = req.body.id; if (!eventId) { res.status(400).send(`No id found`); + console.log('error here', 'noid'); + return; } @@ -124,9 +137,11 @@ exports.eventsPut = async (req, res) => { .find({ id: req.body.id }) .assign({ ...req.body }) .write() + .then(_updateTimers()) .then(res.sendStatus(200)); } catch (error) { res.status(400).send(error); + console.log('error here', error); } }; @@ -151,6 +166,10 @@ exports.eventsPatch = async (req, res) => { .assign({ ...req.body }) .write(); + // update timer + // TODO: update single values when possible + _updateTimers(); + res.sendStatus(200); } catch (error) { res.status(400).send(error); @@ -177,6 +196,10 @@ exports.eventsDelete = async (req, res) => { // add new event _removeById(req.params.eventId); + // update timer + // TODO: update single values when possible + _updateTimers(); + res.sendStatus(201); } catch (error) { res.status(400).send(error);