From 5b7905e86a929575c07418dd3d0b741007e13d87 Mon Sep 17 00:00:00 2001
From: cv <34649812+cpvalente@users.noreply.github.com>
Date: Mon, 24 May 2021 17:06:02 +0200
Subject: [PATCH 01/15] cjs > esm imports
---
server/app.js | 43 +++++++++++++------------
server/classes/EventTimer.js | 12 +++----
server/classes/Timer.js | 6 ++--
server/config.js | 15 +++++++++
server/config.json | 15 ---------
server/controllers/OscController.js | 8 ++---
server/controllers/eventController.js | 24 +++++++-------
server/controllers/eventsController.js | 28 +++++++++-------
server/data/dataModel.js | 4 +--
server/data/eventsDefinition.js | 8 ++---
server/data/playbackData.json | 8 -----
server/package.json | 2 +-
server/routes/eventRouter.js | 39 ++++++++++++++---------
server/routes/eventsRouter.js | 36 +++++++++++++--------
server/routes/playbackRouter.js | 6 ++--
server/yarn.lock | 44 ++++++--------------------
16 files changed, 138 insertions(+), 160 deletions(-)
create mode 100644 server/config.js
delete mode 100644 server/config.json
delete mode 100644 server/data/playbackData.json
diff --git a/server/app.js b/server/app.js
index 3210ded28..6064b1251 100644
--- a/server/app.js
+++ b/server/app.js
@@ -1,27 +1,33 @@
// get config
-const config = require('./config.json');
+import { config } from './config.js';
// init database
-const low = require('lowdb');
-const FileSync = require('lowdb/adapters/FileSync');
+import { Low, JSONFile } from 'lowdb';
-const adapter = new FileSync(config.database.filename);
-const db = low(adapter);
+const adapter = new JSONFile(config.database.filename);
+export const db = new Low(adapter);
// dependencies
-const express = require('express');
-const http = require('http');
-const cors = require('cors');
-const { dbModel } = require('./data/dataModel.js');
+import express from 'express';
+import http from 'http';
+import cors from 'cors';
+import { dbModel } from './data/dataModel.js';
-db.defaults(dbModel).write();
+// Read data from JSON file, this will set db.data content
+await db.read();
-// export db
-module.exports.db = db;
+// If file.json doesn't exist, db.data will be null
+// Set default data
+// db.data ||= { posts: [] };
+if (!db.data) db.data = { dbModel };
+
+// get data
+const { events } = db.data;
// Import Routes
-const eventsRouter = require('./routes/eventsRouter.js');
-const eventRouter = require('./routes/eventRouter.js');
+import { router as eventsRouter } from './routes/eventsRouter.js';
+import { router as eventRouter } from './routes/eventRouter.js';
+
// No settings yet
// const settingsRouter = require('./routes/settingsRouter.js');
@@ -29,7 +35,7 @@ const eventRouter = require('./routes/eventRouter.js');
const port = process.env.PORT || config.server.port;
// Global Objects
-const EventTimer = require('./classes/EventTimer.js');
+import { EventTimer } from './classes/EventTimer.js';
// Create express APP
const app = express();
@@ -62,12 +68,9 @@ app.use((err, req, res, next) => {
// create HTTP server
const server = http.createServer(app);
-// get data (if any)
-const eventlist = db.get('events').value();
-
// init timer
global.timer = new EventTimer(server, config);
-global.timer.setupWithEventList(eventlist);
+global.timer.setupWithEventList(events);
// Start server
server.listen(port, () =>
@@ -75,6 +78,6 @@ server.listen(port, () =>
);
// Start OSC server
-const { initiateOSC } = require('./controllers/OscController.js');
+import { initiateOSC } from './controllers/OscController.js';
initiateOSC(config.osc);
diff --git a/server/classes/EventTimer.js b/server/classes/EventTimer.js
index 6059a7a18..a81ee4388 100644
--- a/server/classes/EventTimer.js
+++ b/server/classes/EventTimer.js
@@ -1,5 +1,5 @@
-const Timer = require('./Timer');
-const socketIo = require('socket.io');
+import { Timer } from './Timer.js';
+import { Server } from 'socket.io';
/*
* EventTimer adds functions specific to APP
@@ -9,7 +9,7 @@ const socketIo = require('socket.io');
*
*/
-class EventTimer extends Timer {
+export class EventTimer extends Timer {
// AUX
DAYMS = 86400000;
@@ -57,12 +57,12 @@ class EventTimer extends Timer {
numEvents = null;
_eventlist = null;
- constructor(server, config) {
+ constructor(httpServer, config) {
// call super constructor
super();
// initialise socketIO server
- this.io = socketIo(server, {
+ this.io = new Server(httpServer, {
cors: {
origin: '*',
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
@@ -797,5 +797,3 @@ class EventTimer extends Timer {
this.loadEvent(this.selectedEventIndex);
}
}
-
-module.exports = EventTimer;
diff --git a/server/classes/Timer.js b/server/classes/Timer.js
index 6fd83e5e3..3a402ccd7 100644
--- a/server/classes/Timer.js
+++ b/server/classes/Timer.js
@@ -4,7 +4,7 @@
*
*/
-class Timer {
+export class Timer {
clock = null;
duration = null;
current = null;
@@ -210,6 +210,4 @@ class Timer {
this._finishedAt = null;
}
}
-}
-
-module.exports = Timer;
+}
\ No newline at end of file
diff --git a/server/config.js b/server/config.js
new file mode 100644
index 000000000..64ef4ef2b
--- /dev/null
+++ b/server/config.js
@@ -0,0 +1,15 @@
+export const config = {
+ timer: {
+ refresh: 1000,
+ },
+ server: {
+ port: 4001,
+ },
+ database: {
+ filename: 'db.json',
+ tablename: 'events',
+ },
+ osc: {
+ port: 8888,
+ },
+};
diff --git a/server/config.json b/server/config.json
deleted file mode 100644
index 40d18e4a8..000000000
--- a/server/config.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "timer": {
- "refresh": 1000
- },
- "server": {
- "port": 4001
- },
- "database": {
- "filename": "db.json",
- "tablename": "events"
- },
- "osc": {
- "port": 8888
- }
-}
\ No newline at end of file
diff --git a/server/controllers/OscController.js b/server/controllers/OscController.js
index 288e5ee5e..89b1010f2 100644
--- a/server/controllers/OscController.js
+++ b/server/controllers/OscController.js
@@ -1,7 +1,7 @@
-const osc = require('node-osc');
+import { Server } from 'node-osc';
-const initiateOSC = (config) => {
- const oscServer = new osc.Server(config.port, '0.0.0.0', () => {
+export const initiateOSC = (config) => {
+ const oscServer = new Server(config.port, '0.0.0.0', () => {
console.log(`OSC Server is listening on port ${config.port}`);
});
@@ -83,5 +83,3 @@ const initiateOSC = (config) => {
}
});
};
-
-module.exports = { initiateOSC };
diff --git a/server/controllers/eventController.js b/server/controllers/eventController.js
index f78e4204e..23988490b 100644
--- a/server/controllers/eventController.js
+++ b/server/controllers/eventController.js
@@ -1,5 +1,5 @@
// get database
-const { db } = require('../app.js');
+import { db } from '../app.js';
const table = 'event';
@@ -9,7 +9,7 @@ function getSettings() {
// Create controller for GET request to 'event'
// Returns ACK message
-exports.getAll = async (req, res) => {
+export const getAll = async (req, res) => {
const settings = getSettings();
if (settings) res.json(settings);
else res.sendStatus(400);
@@ -17,7 +17,7 @@ exports.getAll = async (req, res) => {
// Create controller for POST request to 'event'
// Returns ACK message
-exports.post = async (req, res) => {
+export const post = async (req, res) => {
if (!req.body) {
res.status(400).send('No object found in request');
return;
@@ -35,7 +35,7 @@ exports.post = async (req, res) => {
// Create controller for GET request to 'event/title'
// Returns ACK message
-exports.titleGet = async (req, res) => {
+export const titleGet = async (req, res) => {
const settings = getSettings();
if (settings) res.json(settings.title);
@@ -44,7 +44,7 @@ exports.titleGet = async (req, res) => {
// Create controller for POST request to 'event/title'
// Returns ACK message
-exports.titlePost = async (req, res) => {
+export const titlePost = async (req, res) => {
if (!req.body) {
res.status(400).send('No object found in request');
return;
@@ -61,7 +61,7 @@ exports.titlePost = async (req, res) => {
// Create controller for GET request to '/event/url'
// Returns ACK message
-exports.urlGet = async (req, res) => {
+export const urlGet = async (req, res) => {
const event = getSettings();
if (event) res.json(event.url);
@@ -70,7 +70,7 @@ exports.urlGet = async (req, res) => {
// Create controller for POST request to '/event/url'
// Returns ACK message
-exports.urlPost = async (req, res) => {
+export const urlPost = async (req, res) => {
if (!req.body) {
res.status(400).send('No object found in request');
return;
@@ -87,7 +87,7 @@ exports.urlPost = async (req, res) => {
// Create controller for GET request to 'event/publicInfo'
// Returns ACK message
-exports.publicInfoGet = async (req, res) => {
+export const publicInfoGet = async (req, res) => {
const settings = getSettings();
if (settings) res.json(settings.publicInfo);
@@ -96,7 +96,7 @@ exports.publicInfoGet = async (req, res) => {
// Create controller for POST request to '/event/publicInfo'
// Returns ACK message
-exports.publicInfoPost = async (req, res) => {
+export const publicInfoPost = async (req, res) => {
if (!req.body) {
res.status(400).send('No object found in request');
return;
@@ -113,7 +113,7 @@ exports.publicInfoPost = async (req, res) => {
// Create controller for GET request to 'event/backstageInfo'
// Returns ACK message
-exports.backstageInfoGet = async (req, res) => {
+export const backstageInfoGet = async (req, res) => {
const settings = getSettings();
if (settings) res.json(settings.backstageInfo);
@@ -122,7 +122,7 @@ exports.backstageInfoGet = async (req, res) => {
// Create controller for POST request to '/event/info'
// Returns ACK message
-exports.backstageInfoPost = async (req, res) => {
+export const backstageInfoPost = async (req, res) => {
if (!req.body) {
res.status(400).send('No object found in request');
return;
@@ -139,6 +139,6 @@ exports.backstageInfoPost = async (req, res) => {
// Create controller for GET request to 'event/osc'
// Returns ACK message
-exports.osc = async (req, res) => {
+export const osc = async (req, res) => {
res.send('Not yet implemented').status(500);
};
diff --git a/server/controllers/eventsController.js b/server/controllers/eventsController.js
index 5f3973121..4768eeb16 100644
--- a/server/controllers/eventsController.js
+++ b/server/controllers/eventsController.js
@@ -1,10 +1,14 @@
// get database
-const db = require('../app.js').db;
+import { db } from '../app.js';
// utils
-const customAlphabet = require('nanoid').customAlphabet;
+import { customAlphabet } from 'nanoid';
const nanoid = customAlphabet('1234567890abcdef', 4);
-const eventDefs = require('../data/eventsDefinition.js');
+import {
+ event as eventDef,
+ block as blockDef,
+ delay as delayDEf,
+} from '../data/eventsDefinition.js';
function _getEventsCount() {
return db.get('events').size().value();
@@ -68,21 +72,21 @@ function _deleteTimerId(entryId) {
// Create controller for GET request to '/events'
// Returns -
-exports.eventsGetAll = async (req, res) => {
+export const eventsGetAll = async (req, res) => {
const results = db.get('events').value();
res.json(results);
};
// Create controller for GET request to '/events/:eventId'
// Returns -
-exports.eventsGetById = async (req, res) => {
+export const eventsGetById = async (req, res) => {
const e = db.get('events').find({ id: req.params.eventId }).value();
res.json(e);
};
// Create controller for POST request to '/events/'
// Returns -
-exports.eventsPost = async (req, res) => {
+export const eventsPost = async (req, res) => {
// TODO: Validate event
if (!req.body) {
res.status(400).send(`No object found in request`);
@@ -131,7 +135,7 @@ exports.eventsPost = async (req, res) => {
// Create controller for PUT request to '/events/'
// Returns -
-exports.eventsPut = async (req, res) => {
+export const eventsPut = async (req, res) => {
// no valid params
if (!req.body) {
res.status(400).send(`No object found`);
@@ -162,12 +166,12 @@ exports.eventsPut = async (req, res) => {
// Create controller for PATCH request to '/events/'
// Returns -
-exports.eventsPatch = async (req, res) => {
+export const eventsPatch = async (req, res) => {
// Code is the same as put, call that
this.eventsPut(req, res);
};
-exports.eventsReorder = async (req, res) => {
+export const eventsReorder = async (req, res) => {
// TODO: Validate event
if (!req.body) {
res.status(400).send(`No object found in request`);
@@ -209,7 +213,7 @@ exports.eventsReorder = async (req, res) => {
// Create controller for PATCH request to '/events/applydelay/:eventId'
// Returns -
-exports.eventsApplyDelay = async (req, res) => {
+export const eventsApplyDelay = async (req, res) => {
// no valid params
if (!req.params.eventId) {
res.status(400).send(`No id found in request`);
@@ -274,7 +278,7 @@ exports.eventsApplyDelay = async (req, res) => {
// Create controller for DELETE request to '/events/:eventId'
// Returns -
-exports.eventsDelete = async (req, res) => {
+export const eventsDelete = async (req, res) => {
// no valid params
if (!req.params.eventId) {
res.status(400).send(`No id found in request`);
@@ -298,7 +302,7 @@ exports.eventsDelete = async (req, res) => {
// Create controller for DELETE request to '/events/:eventId'
// Returns -
-exports.eventsDeleteAll = async (req, res) => {
+export const eventsDeleteAll = async (req, res) => {
try {
// set with nothing
db.set('events', []).write();
diff --git a/server/data/dataModel.js b/server/data/dataModel.js
index cc6f67470..cbe964153 100644
--- a/server/data/dataModel.js
+++ b/server/data/dataModel.js
@@ -1,4 +1,4 @@
-const dbModel = {
+export const dbModel = {
events: [],
event: {
title: '',
@@ -14,5 +14,3 @@ const dbModel = {
lock: false,
},
};
-
-module.exports = { dbModel };
diff --git a/server/data/eventsDefinition.js b/server/data/eventsDefinition.js
index d98f968f8..f1f326ee8 100644
--- a/server/data/eventsDefinition.js
+++ b/server/data/eventsDefinition.js
@@ -1,4 +1,4 @@
-const event = {
+export const event = {
title: '',
subtitle: '',
presenter: '',
@@ -10,14 +10,12 @@ const event = {
revision: 0,
};
-const delay = {
+export const delay = {
duration: 0,
type: 'delay',
revision: 0,
};
-const block = {
+export const block = {
type: 'block',
};
-
-module.exports = { event, delay, block };
diff --git a/server/data/playbackData.json b/server/data/playbackData.json
deleted file mode 100644
index 0337f8752..000000000
--- a/server/data/playbackData.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "current": null,
- "next": null,
- "currentTimer": null,
- "numEvents": 0,
- "state": "pause",
- "prevState": "pause"
-}
\ No newline at end of file
diff --git a/server/package.json b/server/package.json
index 45025a56a..243cd0fa3 100644
--- a/server/package.json
+++ b/server/package.json
@@ -6,7 +6,7 @@
"body-parser": "~1.19.0",
"express": "~4.17.1",
"express-session": "~1.17.1",
- "lowdb": "^1.0.0",
+ "lowdb": "2.1.0",
"nanoid": "^3.1.22",
"node-osc": "^6.0.1",
"passport": "~0.4.1",
diff --git a/server/routes/eventRouter.js b/server/routes/eventRouter.js
index 327fe30b5..99a6b5054 100644
--- a/server/routes/eventRouter.js
+++ b/server/routes/eventRouter.js
@@ -1,37 +1,46 @@
-const express = require('express');
-const router = express.Router();
+import express from 'express';
+export const router = express.Router();
// import event controller
-const eventController = require('../controllers/eventController');
+import {
+ getAll,
+ post,
+ titleGet,
+ titlePost,
+ publicInfoGet,
+ publicInfoPost,
+ backstageInfoGet,
+ backstageInfoPost,
+ urlGet,
+ urlPost,
+} from '../controllers/eventController.js';
// create route between controller and '/settings' endpoint
-router.get('/', eventController.getAll);
+router.get('/', getAll);
// create route between controller and '/settings' endpoint
-router.post('/', eventController.post);
+router.post('/', post);
// create route between controller and '/event/title' endpoint
-router.get('/title', eventController.titleGet);
+router.get('/title', titleGet);
// create route between controller and '/event/title' endpoint
-router.post('/title', eventController.titlePost);
+router.post('/title', titlePost);
// create route between controller and '/event/info' endpoint
-router.get('/publicInfo', eventController.publicInfoGet);
+router.get('/publicInfo', publicInfoGet);
// create route between controller and '/event/info' endpoint
-router.post('/publicInfo', eventController.publicInfoPost);
+router.post('/publicInfo', publicInfoPost);
// create route between controller and '/event/info' endpoint
-router.get('/backstageInfo', eventController.backstageInfoGet);
+router.get('/backstageInfo', backstageInfoGet);
// create route between controller and '/event/info' endpoint
-router.post('/backstageInfo', eventController.backstageInfoPost);
+router.post('/backstageInfo', backstageInfoPost);
// create route between controller and '/event/url' endpoint
-router.get('/url', eventController.urlGet);
+router.get('/url', urlGet);
// create route between controller and '/event/url' endpoint
-router.post('/url', eventController.urlPost);
-
-module.exports = router;
+router.post('/url', urlPost);
diff --git a/server/routes/eventsRouter.js b/server/routes/eventsRouter.js
index b8bf90cd9..9ea280c45 100644
--- a/server/routes/eventsRouter.js
+++ b/server/routes/eventsRouter.js
@@ -1,34 +1,42 @@
-const express = require('express');
-const router = express.Router();
+import express from 'express';
+export const router = express.Router();
// import events controller
-const eventsController = require('../controllers/eventsController');
+import {
+ eventsGetAll,
+ eventsGetById,
+ eventsPost,
+ eventsPut,
+ eventsPatch,
+ eventsReorder,
+ eventsApplyDelay,
+ eventsDeleteAll,
+ eventsDelete,
+} from '../controllers/eventsController.js';
// create route between controller and '/events/' endpoint
-router.get('/', eventsController.eventsGetAll);
+router.get('/', eventsGetAll);
// create route between controller and '/events/:eventId' endpoint
-router.get('/:eventId', eventsController.eventsGetById);
+router.get('/:eventId', eventsGetById);
// create route between controller and '/events/' endpoint
-router.post('/', eventsController.eventsPost);
+router.post('/', eventsPost);
// create route between controller and '/events/' endpoint
-router.put('/', eventsController.eventsPut);
+router.put('/', eventsPut);
// create route between controller and '/events/' endpoint
-router.patch('/', eventsController.eventsPatch);
+router.patch('/', eventsPatch);
// create route between controller and '/events/reorder' endpoint
-router.patch('/reorder/', eventsController.eventsReorder);
+router.patch('/reorder/', eventsReorder);
// create route between controller and '/events/applydelay/:eventId' endpoint
-router.patch('/applydelay/:eventId', eventsController.eventsApplyDelay);
+router.patch('/applydelay/:eventId', eventsApplyDelay);
// create route between controller and '/events/all' endpoint
-router.delete('/all', eventsController.eventsDeleteAll);
+router.delete('/all', eventsDeleteAll);
// create route between controller and '/events/:eventId' endpoint
-router.delete('/:eventId', eventsController.eventsDelete);
-
-module.exports = router;
+router.delete('/:eventId', eventsDelete);
diff --git a/server/routes/playbackRouter.js b/server/routes/playbackRouter.js
index e767a3156..3b71b9c86 100644
--- a/server/routes/playbackRouter.js
+++ b/server/routes/playbackRouter.js
@@ -1,5 +1,5 @@
-const express = require('express');
-const router = express.Router();
+import express from 'express';
+export const router = express.Router();
// import event controller
const playbackController = require('../controllers/playbackController');
@@ -30,5 +30,3 @@ router.get('/unload', playbackController.pbUnload);
// create route between controller and '/playback/reload' endpoint
router.get('/reload', playbackController.pbReload);
-
-module.exports = router;
diff --git a/server/yarn.lock b/server/yarn.lock
index 4b7da8610..7ef514f68 100644
--- a/server/yarn.lock
+++ b/server/yarn.lock
@@ -253,11 +253,6 @@ fresh@0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
-graceful-fs@^4.1.3:
- version "4.2.6"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
- integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
-
http-errors@1.7.2:
version "1.7.2"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
@@ -302,26 +297,12 @@ ipaddr.js@1.9.1:
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
-is-promise@^2.1.0:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
- integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
-
-lodash@4:
- version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
- integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-lowdb@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lowdb/-/lowdb-1.0.0.tgz#5243be6b22786ccce30e50c9a33eac36b20c8064"
- integrity sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==
+lowdb@2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/lowdb/-/lowdb-2.1.0.tgz#c8063e228b5ab3e082ece90e0512537ecb6e1e2a"
+ integrity sha512-F4Go8/V37gAidTR3c5poyjprOpZSDNSLJVOmI0ny4D4q9rC37OkBhlzX0bqj7LZlT3UIj4FchmZrrSw7qY+eGQ==
dependencies:
- graceful-fs "^4.1.3"
- is-promise "^2.1.0"
- lodash "4"
- pify "^3.0.0"
- steno "^0.4.1"
+ steno "^1.0.0"
media-typer@0.3.0:
version "0.3.0"
@@ -446,11 +427,6 @@ pause@0.0.1:
resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d"
integrity sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
- integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
-
proxy-addr@~2.0.5:
version "2.0.6"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
@@ -567,12 +543,10 @@ socket.io@^4.0.0:
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
-steno@^0.4.1:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/steno/-/steno-0.4.4.tgz#071105bdfc286e6615c0403c27e9d7b5dcb855cb"
- integrity sha1-BxEFvfwobmYVwEA8J+nXtdy4Vcs=
- dependencies:
- graceful-fs "^4.1.3"
+steno@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/steno/-/steno-1.0.0.tgz#475e32c6066ec9760229eaaf1550601764fbecba"
+ integrity sha512-C/KgCvEa1yWnpHmaPjAXrz1yWxh6hs+HvhqqPa71euaQmNi1wr4+WFo57VQxjKKuFl2KqS7gtlrN0oxj2noQLw==
toidentifier@1.0.0:
version "1.0.0"
From bb1f063c6a86b68c0fb6eec27aee4f77c7fa89fe Mon Sep 17 00:00:00 2001
From: cv <34649812+cpvalente@users.noreply.github.com>
Date: Mon, 24 May 2021 18:22:29 +0200
Subject: [PATCH 02/15] migrate event logic
---
server/app.js | 9 +++--
server/controllers/eventController.js | 47 ++++++++-------------------
server/data/dataModel.js | 2 +-
3 files changed, 21 insertions(+), 37 deletions(-)
diff --git a/server/app.js b/server/app.js
index 6064b1251..8244342a3 100644
--- a/server/app.js
+++ b/server/app.js
@@ -18,11 +18,14 @@ await db.read();
// If file.json doesn't exist, db.data will be null
// Set default data
-// db.data ||= { posts: [] };
-if (!db.data) db.data = { dbModel };
+// db.data ||= { events: [] };
+if (db.data == null) {
+ db.data = dbModel;
+ db.write();
+}
// get data
-const { events } = db.data;
+export const data = db.data;
// Import Routes
import { router as eventsRouter } from './routes/eventsRouter.js';
diff --git a/server/controllers/eventController.js b/server/controllers/eventController.js
index 23988490b..c003e4086 100644
--- a/server/controllers/eventController.js
+++ b/server/controllers/eventController.js
@@ -1,18 +1,10 @@
// get database
-import { db } from '../app.js';
-
-const table = 'event';
-
-function getSettings() {
- return db.get(table).value();
-}
+import { db, data } from '../app.js';
// Create controller for GET request to 'event'
// Returns ACK message
export const getAll = async (req, res) => {
- const settings = getSettings();
- if (settings) res.json(settings);
- else res.sendStatus(400);
+ res.json(data.event);
};
// Create controller for POST request to 'event'
@@ -24,22 +16,20 @@ export const post = async (req, res) => {
}
// TODO: validate data
try {
- db.get(table)
- .assign({ ...req.body })
- .write();
+ data.event = { ...data.event, ...req.body };
+ db.write();
+ // data.event.push({ ...req.body }).write();
res.sendStatus(200);
} catch (error) {
res.status(400).send(error);
+ console.log(error);
}
};
// Create controller for GET request to 'event/title'
// Returns ACK message
export const titleGet = async (req, res) => {
- const settings = getSettings();
-
- if (settings) res.json(settings.title);
- else res.sendStatus(400);
+ res.json(data.event.title);
};
// Create controller for POST request to 'event/title'
@@ -52,7 +42,7 @@ export const titlePost = async (req, res) => {
// TODO: validate data
try {
- db.get(table).assign({ title: req.body.title }).write();
+ data.event.assign({ title: req.body.title }).write();
res.sendStatus(200);
} catch (error) {
res.status(400).send(error);
@@ -62,10 +52,7 @@ export const titlePost = async (req, res) => {
// Create controller for GET request to '/event/url'
// Returns ACK message
export const urlGet = async (req, res) => {
- const event = getSettings();
-
- if (event) res.json(event.url);
- else res.sendStatus(400);
+ res.json(data.event.url);
};
// Create controller for POST request to '/event/url'
@@ -78,7 +65,7 @@ export const urlPost = async (req, res) => {
// TODO: validate data
try {
- db.get(table).assign({ url: req.body.url }).write();
+ data.event.assign({ url: req.body.url }).write();
res.sendStatus(200);
} catch (error) {
res.status(400).send(error);
@@ -88,10 +75,7 @@ export const urlPost = async (req, res) => {
// Create controller for GET request to 'event/publicInfo'
// Returns ACK message
export const publicInfoGet = async (req, res) => {
- const settings = getSettings();
-
- if (settings) res.json(settings.publicInfo);
- else res.sendStatus(400);
+ res.json(data.event.publicInfo);
};
// Create controller for POST request to '/event/publicInfo'
@@ -104,7 +88,7 @@ export const publicInfoPost = async (req, res) => {
// TODO: validate data
try {
- db.get(table).assign({ publicInfo: req.body.publicInfo }).write();
+ data.event.assign({ publicInfo: req.body.publicInfo }).write();
res.sendStatus(200);
} catch (error) {
res.status(400).send(error);
@@ -114,10 +98,7 @@ export const publicInfoPost = async (req, res) => {
// Create controller for GET request to 'event/backstageInfo'
// Returns ACK message
export const backstageInfoGet = async (req, res) => {
- const settings = getSettings();
-
- if (settings) res.json(settings.backstageInfo);
- else res.sendStatus(400);
+ res.json(data.event.backstageInfo);
};
// Create controller for POST request to '/event/info'
@@ -130,7 +111,7 @@ export const backstageInfoPost = async (req, res) => {
// TODO: validate data
try {
- db.get(table).assign({ backstageInfo: req.body.backstageInfo }).write();
+ data.event.assign({ backstageInfo: req.body.backstageInfo }).write();
res.sendStatus(200);
} catch (error) {
res.status(400).send(error);
diff --git a/server/data/dataModel.js b/server/data/dataModel.js
index cbe964153..39e781b87 100644
--- a/server/data/dataModel.js
+++ b/server/data/dataModel.js
@@ -4,7 +4,7 @@ export const dbModel = {
title: '',
url: '',
publicInfo: '',
- backStageInfo: '',
+ backstageInfo: '',
},
settings: {
app: 'ontime',
From 7406d5447295dd8b02ac551054facd9fab5b853a Mon Sep 17 00:00:00 2001
From: cv <34649812+cpvalente@users.noreply.github.com>
Date: Mon, 24 May 2021 23:15:53 +0200
Subject: [PATCH 03/15] refract: delete unused code
---
server/controllers/eventController.js | 105 +-------------------------
server/routes/eventRouter.js | 45 ++---------
2 files changed, 8 insertions(+), 142 deletions(-)
diff --git a/server/controllers/eventController.js b/server/controllers/eventController.js
index c003e4086..938e412b7 100644
--- a/server/controllers/eventController.js
+++ b/server/controllers/eventController.js
@@ -3,13 +3,13 @@ import { db, data } from '../app.js';
// Create controller for GET request to 'event'
// Returns ACK message
-export const getAll = async (req, res) => {
+export const getEvent = async (req, res) => {
res.json(data.event);
};
// Create controller for POST request to 'event'
// Returns ACK message
-export const post = async (req, res) => {
+export const postEvent = async (req, res) => {
if (!req.body) {
res.status(400).send('No object found in request');
return;
@@ -17,109 +17,10 @@ export const post = async (req, res) => {
// TODO: validate data
try {
data.event = { ...data.event, ...req.body };
- db.write();
- // data.event.push({ ...req.body }).write();
+ await db.write();
res.sendStatus(200);
} catch (error) {
res.status(400).send(error);
console.log(error);
}
};
-
-// Create controller for GET request to 'event/title'
-// Returns ACK message
-export const titleGet = async (req, res) => {
- res.json(data.event.title);
-};
-
-// Create controller for POST request to 'event/title'
-// Returns ACK message
-export const titlePost = async (req, res) => {
- if (!req.body) {
- res.status(400).send('No object found in request');
- return;
- }
-
- // TODO: validate data
- try {
- data.event.assign({ title: req.body.title }).write();
- res.sendStatus(200);
- } catch (error) {
- res.status(400).send(error);
- }
-};
-
-// Create controller for GET request to '/event/url'
-// Returns ACK message
-export const urlGet = async (req, res) => {
- res.json(data.event.url);
-};
-
-// Create controller for POST request to '/event/url'
-// Returns ACK message
-export const urlPost = async (req, res) => {
- if (!req.body) {
- res.status(400).send('No object found in request');
- return;
- }
-
- // TODO: validate data
- try {
- data.event.assign({ url: req.body.url }).write();
- res.sendStatus(200);
- } catch (error) {
- res.status(400).send(error);
- }
-};
-
-// Create controller for GET request to 'event/publicInfo'
-// Returns ACK message
-export const publicInfoGet = async (req, res) => {
- res.json(data.event.publicInfo);
-};
-
-// Create controller for POST request to '/event/publicInfo'
-// Returns ACK message
-export const publicInfoPost = async (req, res) => {
- if (!req.body) {
- res.status(400).send('No object found in request');
- return;
- }
-
- // TODO: validate data
- try {
- data.event.assign({ publicInfo: req.body.publicInfo }).write();
- res.sendStatus(200);
- } catch (error) {
- res.status(400).send(error);
- }
-};
-
-// Create controller for GET request to 'event/backstageInfo'
-// Returns ACK message
-export const backstageInfoGet = async (req, res) => {
- res.json(data.event.backstageInfo);
-};
-
-// Create controller for POST request to '/event/info'
-// Returns ACK message
-export const backstageInfoPost = async (req, res) => {
- if (!req.body) {
- res.status(400).send('No object found in request');
- return;
- }
-
- // TODO: validate data
- try {
- data.event.assign({ backstageInfo: req.body.backstageInfo }).write();
- res.sendStatus(200);
- } catch (error) {
- res.status(400).send(error);
- }
-};
-
-// Create controller for GET request to 'event/osc'
-// Returns ACK message
-export const osc = async (req, res) => {
- res.send('Not yet implemented').status(500);
-};
diff --git a/server/routes/eventRouter.js b/server/routes/eventRouter.js
index 99a6b5054..9b929f95d 100644
--- a/server/routes/eventRouter.js
+++ b/server/routes/eventRouter.js
@@ -2,45 +2,10 @@ import express from 'express';
export const router = express.Router();
// import event controller
-import {
- getAll,
- post,
- titleGet,
- titlePost,
- publicInfoGet,
- publicInfoPost,
- backstageInfoGet,
- backstageInfoPost,
- urlGet,
- urlPost,
-} from '../controllers/eventController.js';
+import { getEvent, postEvent } from '../controllers/eventController.js';
-// create route between controller and '/settings' endpoint
-router.get('/', getAll);
+// create route between controller and 'GET /event' endpoint
+router.get('/', getEvent);
-// create route between controller and '/settings' endpoint
-router.post('/', post);
-
-// create route between controller and '/event/title' endpoint
-router.get('/title', titleGet);
-
-// create route between controller and '/event/title' endpoint
-router.post('/title', titlePost);
-
-// create route between controller and '/event/info' endpoint
-router.get('/publicInfo', publicInfoGet);
-
-// create route between controller and '/event/info' endpoint
-router.post('/publicInfo', publicInfoPost);
-
-// create route between controller and '/event/info' endpoint
-router.get('/backstageInfo', backstageInfoGet);
-
-// create route between controller and '/event/info' endpoint
-router.post('/backstageInfo', backstageInfoPost);
-
-// create route between controller and '/event/url' endpoint
-router.get('/url', urlGet);
-
-// create route between controller and '/event/url' endpoint
-router.post('/url', urlPost);
+// create route between controller and 'POST /event' endpoint
+router.post('/', postEvent);
From 7fe3a28a7611da5b5734646a02168bbcdaddefc2 Mon Sep 17 00:00:00 2001
From: cv <34649812+cpvalente@users.noreply.github.com>
Date: Mon, 24 May 2021 23:16:19 +0200
Subject: [PATCH 04/15] migrate logic
---
server/app.js | 4 +-
server/controllers/eventsController.js | 67 +++++++++++++++-----------
2 files changed, 41 insertions(+), 30 deletions(-)
diff --git a/server/app.js b/server/app.js
index 8244342a3..034e11e90 100644
--- a/server/app.js
+++ b/server/app.js
@@ -18,7 +18,7 @@ await db.read();
// If file.json doesn't exist, db.data will be null
// Set default data
-// db.data ||= { events: [] };
+// db.data ||= { events: [] }; NODE v15 - v16
if (db.data == null) {
db.data = dbModel;
db.write();
@@ -73,7 +73,7 @@ const server = http.createServer(app);
// init timer
global.timer = new EventTimer(server, config);
-global.timer.setupWithEventList(events);
+global.timer.setupWithEventList(data.events);
// Start server
server.listen(port, () =>
diff --git a/server/controllers/eventsController.js b/server/controllers/eventsController.js
index 4768eeb16..bbb2dcb51 100644
--- a/server/controllers/eventsController.js
+++ b/server/controllers/eventsController.js
@@ -1,26 +1,26 @@
// get database
-import { db } from '../app.js';
+import { db, data } from '../app.js';
// utils
import { customAlphabet } from 'nanoid';
const nanoid = customAlphabet('1234567890abcdef', 4);
import {
event as eventDef,
+ delay as delayDef,
block as blockDef,
- delay as delayDEf,
} from '../data/eventsDefinition.js';
function _getEventsCount() {
- return db.get('events').size().value();
+ return Array.from(data.events).length;
}
function _pushNew(entry) {
- return db.get('events').push(entry).write();
+ return data.events.push(entry).write();
}
-function _insertAt(entry, index) {
+async function _insertAt(entry, index) {
// get events
- let events = db.get('events').value();
+ let events = data.events;
let count = events.length;
let order = entry.order;
@@ -43,15 +43,18 @@ function _insertAt(entry, index) {
}
// save events
- db.set('events', events).write();
+ data.events = events;
+ await db.write();
}
-function _removeById(eventId) {
- return db.get('events').remove({ id: eventId }).write();
+async function _removeById(eventId) {
+ data.events = Array.from(data.events).filter((e) => e.id != eventId);
+ await db.write();
}
function getEventEvents() {
- return db.get('events').chain().filter({ type: 'event' }).value();
+ // return data.events.filter((e) => e.type === 'event');
+ return Array.from(data.events).filter((e) => e.type === 'event');
}
// Updates timer object
@@ -73,14 +76,14 @@ function _deleteTimerId(entryId) {
// Create controller for GET request to '/events'
// Returns -
export const eventsGetAll = async (req, res) => {
- const results = db.get('events').value();
- res.json(results);
+ res.json(data.events);
};
// Create controller for GET request to '/events/:eventId'
// Returns -
export const eventsGetById = async (req, res) => {
- const e = db.get('events').find({ id: req.params.eventId }).value();
+ const e = data.events.find({ id: req.params.eventId }).value();
+ console.log('event by id', e);
res.json(e);
};
@@ -99,13 +102,13 @@ export const eventsPost = async (req, res) => {
switch (req.body.type) {
case 'event':
- newEvent = { ...eventDefs.event, ...req.body };
+ newEvent = { ...eventDef, ...req.body };
break;
case 'delay':
- newEvent = { ...eventDefs.delay, ...req.body };
+ newEvent = { ...delayDef, ...req.body };
break;
case 'block':
- newEvent = { ...eventDefs.block, ...req.body };
+ newEvent = { ...blockDef, ...req.body };
break;
default:
@@ -149,17 +152,23 @@ export const eventsPut = async (req, res) => {
}
try {
- db.get('events')
- .find({ id: req.body.id })
- .assign({ ...req.body })
- .update('revision', (n) => n + 1)
- .write();
+ const eventIndex = data.events.findIndex((e) => e.id === req.body.id);
+ if (eventIndex === -1) {
+ res.status(400).send(`No Id found found`);
+ return;
+ }
+
+ const e = data.events[eventIndex];
+ data.events[eventIndex] = { ...e, ...req.body };
+ data.events[eventIndex].revision++;
+ db.write();
// update timer
_updateTimersSingle(req.body.id, req.body);
res.sendStatus(200);
} catch (error) {
+ console.log(error);
res.status(400).send(error);
}
};
@@ -168,7 +177,7 @@ export const eventsPut = async (req, res) => {
// Returns -
export const eventsPatch = async (req, res) => {
// Code is the same as put, call that
- this.eventsPut(req, res);
+ eventsPut(req, res);
};
export const eventsReorder = async (req, res) => {
@@ -181,7 +190,7 @@ export const eventsReorder = async (req, res) => {
const { index, from, to } = req.body;
// get events
- let events = db.get('events').value();
+ let events = data.events;
let idx = events.findIndex((e) => e.id === index, from);
// Check if item is at given index
@@ -198,7 +207,8 @@ export const eventsReorder = async (req, res) => {
events.splice(to, 0, reorderedItem);
// save events
- db.set('events', events).write();
+ data.events = events;
+ db.write();
// TODO: would it be more efficient to reorder at timer?
// update timer
@@ -222,7 +232,7 @@ export const eventsApplyDelay = async (req, res) => {
try {
// get events
- let events = db.get('events').value();
+ let events = data.events;
// AUX
let delayIndex = null;
@@ -263,7 +273,8 @@ export const eventsApplyDelay = async (req, res) => {
if (blockIndex) events.splice(blockIndex - 1, 1);
// update events
- db.set('events', events).write();
+ data.events = events;
+ db.write();
// update timer
_updateTimers();
@@ -305,14 +316,14 @@ export const eventsDelete = async (req, res) => {
export const eventsDeleteAll = async (req, res) => {
try {
// set with nothing
- db.set('events', []).write();
+ data.events = [];
+ db.write();
// update timer object
_updateTimersSingle();
res.sendStatus(201);
} catch (error) {
- console.log('debug:', error);
res.status(400).send(error);
}
};
From 250946fdc6a94d0fe879c71f643048b0f5d01567 Mon Sep 17 00:00:00 2001
From: cv <34649812+cpvalente@users.noreply.github.com>
Date: Tue, 25 May 2021 09:39:28 +0200
Subject: [PATCH 05/15] type module
---
server/package.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/server/package.json b/server/package.json
index 243cd0fa3..5597927f8 100644
--- a/server/package.json
+++ b/server/package.json
@@ -2,6 +2,7 @@
"name": "passport-example",
"version": "0.0.1",
"description": "Example with Passport (http://www.passportjs.org/)",
+ "type": "module",
"dependencies": {
"body-parser": "~1.19.0",
"express": "~4.17.1",
From b61a82627e8aeac13906df6dabf16424e7837a52 Mon Sep 17 00:00:00 2001
From: cv <34649812+cpvalente@users.noreply.github.com>
Date: Wed, 26 May 2021 23:10:00 +0200
Subject: [PATCH 06/15] feat: download
- able to download file from express
---
client/src/app/api/eventsApi.js | 15 +++++++++++++++
.../components/buttons/DownloadIconBtn.jsx | 18 ++++++++++++++++++
client/src/features/editors/Editor.jsx | 8 ++++++++
client/src/features/editors/Editor.module.css | 6 ++++++
server/controllers/ontimeController.js | 11 +++++++++++
server/routes/ontimeRouter.js | 5 +++++
6 files changed, 63 insertions(+)
create mode 100644 client/src/common/components/buttons/DownloadIconBtn.jsx
create mode 100644 server/controllers/ontimeController.js
create mode 100644 server/routes/ontimeRouter.js
diff --git a/client/src/app/api/eventsApi.js b/client/src/app/api/eventsApi.js
index 17a2ada40..a185a54be 100644
--- a/client/src/app/api/eventsApi.js
+++ b/client/src/app/api/eventsApi.js
@@ -1,6 +1,21 @@
import axios from 'axios';
import { eventsURL } from '../api/apiConstants';
+export const downloadEvents = async () => {
+ await axios({
+ url: eventsURL + '/download',
+ method: 'GET',
+ responseType: 'blob', // important
+ }).then((response) => {
+ const url = window.URL.createObjectURL(new Blob([response.data]));
+ const link = document.createElement('a');
+ link.href = url;
+ link.setAttribute('download', 'events.json');
+ document.body.appendChild(link);
+ link.click();
+ });
+};
+
export const fetchAllEvents = async () => {
const res = await axios.get(eventsURL);
return res.data;
diff --git a/client/src/common/components/buttons/DownloadIconBtn.jsx b/client/src/common/components/buttons/DownloadIconBtn.jsx
new file mode 100644
index 000000000..8b30023b4
--- /dev/null
+++ b/client/src/common/components/buttons/DownloadIconBtn.jsx
@@ -0,0 +1,18 @@
+import { IconButton } from '@chakra-ui/button';
+import { FiDownload } from 'react-icons/fi';
+
+export default function DownloadIconBtn(props) {
+ const { clickhandler, ...rest } = props;
+ return (
+