aboutsummaryrefslogtreecommitdiff
path: root/src/shared/lib
diff options
context:
space:
mode:
authorNoah Loomans <noahloomans@gmail.com>2018-07-07 17:34:02 +0200
committerNoah Loomans <noahloomans@gmail.com>2018-07-07 17:34:02 +0200
commit5c265c04ad513d845a41c7866c3ed231c8d5e68e (patch)
tree9a86b66958e59e4a07d0c8e10731667b05990816 /src/shared/lib
parent8b1f29f2802a081a67151e47b9c52803d7cc568a (diff)
server: Use database for userssync-with-db
Diffstat (limited to 'src/shared/lib')
-rw-r--r--src/shared/lib/axios.js35
-rw-r--r--src/shared/lib/db.js62
-rw-r--r--src/shared/lib/getURLOfUser.js35
3 files changed, 132 insertions, 0 deletions
diff --git a/src/shared/lib/axios.js b/src/shared/lib/axios.js
new file mode 100644
index 0000000..2de6047
--- /dev/null
+++ b/src/shared/lib/axios.js
@@ -0,0 +1,35 @@
+/**
+ * Copyright (C) 2018 Noah Loomans
+ *
+ * This file is part of rooster.hetmml.nl.
+ *
+ * rooster.hetmml.nl is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * rooster.hetmml.nl is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with rooster.hetmml.nl. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+const axios = require('axios');
+const iconv = require('iconv-lite');
+
+/**
+ * Create a new axios instance with sensible defaults for connecting to
+ * meetingpointmco.nl
+*/
+const instance = axios.create({
+ baseURL: 'http://www.meetingpointmco.nl/Roosters-AL/doc/',
+ timeout: 5000,
+ responseType: 'arraybuffer',
+ transformResponse: [responseBody => iconv.decode(responseBody, 'iso-8859-1')],
+});
+
+module.exports = instance;
diff --git a/src/shared/lib/db.js b/src/shared/lib/db.js
new file mode 100644
index 0000000..cb0be09
--- /dev/null
+++ b/src/shared/lib/db.js
@@ -0,0 +1,62 @@
+/**
+ * Copyright (C) 2018 Noah Loomans
+ *
+ * This file is part of rooster.hetmml.nl.
+ *
+ * rooster.hetmml.nl is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * rooster.hetmml.nl is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with rooster.hetmml.nl. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+const { Pool } = require('pg');
+
+const pool = new Pool({
+ database: process.env.PGDATABASE || 'rooster_hetmml_nl',
+});
+
+// the pool with emit an error on behalf of any idle clients
+// it contains if a backend error or network partition happens
+pool.on('error', (error) => {
+ console.error('Unexpected error on idle client', error);
+ // TODO: Do we want to exit here?
+ process.exit(-1);
+});
+
+async function insertUsers(users) {
+ await pool.query('TRUNCATE TABLE schedule_user');
+ const promises = users.map(user => (
+ pool.query(
+ 'INSERT INTO schedule_user(key, type, name, alt_name, index) VALUES ($1, $2, $3, $4, $5)',
+ [user.key, user.type, user.name, user.altName, user.index],
+ )
+ ));
+ await Promise.all(promises);
+}
+
+async function getUsers() {
+ const { rows } = await pool.query(
+ 'SELECT key, type, name, alt_name, index FROM schedule_user',
+ );
+
+ const users = rows.map(row => ({
+ key: row.key,
+ type: row.type,
+ name: row.name,
+ altName: row.altName,
+ index: row.index,
+ }));
+
+ return users;
+}
+
+module.exports = { insertUsers, getUsers };
diff --git a/src/shared/lib/getURLOfUser.js b/src/shared/lib/getURLOfUser.js
new file mode 100644
index 0000000..934f235
--- /dev/null
+++ b/src/shared/lib/getURLOfUser.js
@@ -0,0 +1,35 @@
+/**
+ * Copyright (C) 2018 Noah Loomans
+ *
+ * This file is part of rooster.hetmml.nl.
+ *
+ * rooster.hetmml.nl is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * rooster.hetmml.nl is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with rooster.hetmml.nl. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+const leftPad = require('left-pad'); // I imported this just to piss you off ;)
+
+const shortTypeOf = {
+ class: 'c',
+ teacher: 't',
+ student: 's',
+ room: 'r',
+};
+
+function getURLOfUser(scheduleType, longType, index, week) {
+ const type = shortTypeOf[longType];
+ return `/${scheduleType}roosters/${leftPad(week, 2, '0')}/${type}/${type}${leftPad(index + 1, 5, '0')}.htm`;
+}
+
+module.exports = getURLOfUser;