integrate db and playback

This commit is contained in:
cv
2021-04-17 13:23:43 +02:00
parent 2890687f73
commit ed22ad23b9
4 changed files with 70 additions and 13 deletions
+18 -1
View File
@@ -1,6 +1,16 @@
// get config // get config
const config = require('./config.json'); 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 // dependencies
const express = require('express'); const express = require('express');
const http = require('http'); const http = require('http');
@@ -14,9 +24,11 @@ const playbackRouter = require('./routes/playbackRouter.js');
const port = process.env.PORT || config.server.port; const port = process.env.PORT || config.server.port;
// Global Objects // Global Objects
const eventlist = require('./data/eventsData.json');
const EventTimer = require('./classes/EventTimer.js'); const EventTimer = require('./classes/EventTimer.js');
// get data (if any)
const eventlist = db.get('events').sortBy('order').value();
// init timer // init timer
global.timer = new EventTimer(); global.timer = new EventTimer();
timer.setupWithEventList(eventlist); timer.setupWithEventList(eventlist);
@@ -38,6 +50,11 @@ app.use(express.json());
app.use('/events', eventsRouter); app.use('/events', eventsRouter);
app.use('/playback', playbackRouter); app.use('/playback', playbackRouter);
// implement general router
app.get('/', function (req, res) {
res.send('ontime API');
});
// Implement route for errors // Implement route for errors
app.use((err, req, res, next) => { app.use((err, req, res, next) => {
console.error(err.stack); console.error(err.stack);
+13
View File
@@ -50,6 +50,19 @@ class EventTimer extends Timer {
this.loadEvent(0); 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) { loadEvent(eventIndex) {
// set event specific // set event specific
const e = this._eventList[eventIndex]; const e = this._eventList[eventIndex];
+4
View File
@@ -4,5 +4,9 @@
}, },
"server": { "server": {
"port": 4001 "port": 4001
},
"database": {
"filename": "db.json",
"tablename": "events"
} }
} }
+35 -12
View File
@@ -1,15 +1,5 @@
// CONST // get database
const filename = 'db.json'; const db = require('../app.js').db;
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();
// utils // utils
const { nanoid } = require('nanoid'); const { nanoid } = require('nanoid');
@@ -44,6 +34,20 @@ function _removeById(eventId) {
return db.get('events').remove({ id: eventId }).write(); 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' // Create controller for GET request to '/events'
// Returns - // Returns -
exports.eventsGetAll = async (req, res) => { exports.eventsGetAll = async (req, res) => {
@@ -98,9 +102,14 @@ exports.eventsPost = async (req, res) => {
// add new event // add new event
_pushNew(newEvent); _pushNew(newEvent);
// update timer
// TODO: update single values when possible
_updateTimers();
res.sendStatus(201); res.sendStatus(201);
} catch (error) { } catch (error) {
res.status(400).send(error); res.status(400).send(error);
console.log('debug', error);
} }
}; };
@@ -110,12 +119,16 @@ exports.eventsPut = async (req, res) => {
// no valid params // no valid params
if (!req.body) { if (!req.body) {
res.status(400).send(`No object found`); res.status(400).send(`No object found`);
console.log('error here', 'noobj');
return; return;
} }
let eventId = req.body.id; let eventId = req.body.id;
if (!eventId) { if (!eventId) {
res.status(400).send(`No id found`); res.status(400).send(`No id found`);
console.log('error here', 'noid');
return; return;
} }
@@ -124,9 +137,11 @@ exports.eventsPut = async (req, res) => {
.find({ id: req.body.id }) .find({ id: req.body.id })
.assign({ ...req.body }) .assign({ ...req.body })
.write() .write()
.then(_updateTimers())
.then(res.sendStatus(200)); .then(res.sendStatus(200));
} catch (error) { } catch (error) {
res.status(400).send(error); res.status(400).send(error);
console.log('error here', error);
} }
}; };
@@ -151,6 +166,10 @@ exports.eventsPatch = async (req, res) => {
.assign({ ...req.body }) .assign({ ...req.body })
.write(); .write();
// update timer
// TODO: update single values when possible
_updateTimers();
res.sendStatus(200); res.sendStatus(200);
} catch (error) { } catch (error) {
res.status(400).send(error); res.status(400).send(error);
@@ -177,6 +196,10 @@ exports.eventsDelete = async (req, res) => {
// add new event // add new event
_removeById(req.params.eventId); _removeById(req.params.eventId);
// update timer
// TODO: update single values when possible
_updateTimers();
res.sendStatus(201); res.sendStatus(201);
} catch (error) { } catch (error) {
res.status(400).send(error); res.status(400).send(error);