aboutsummaryrefslogtreecommitdiff
path: root/parseExceptions.js
diff options
context:
space:
mode:
Diffstat (limited to 'parseExceptions.js')
-rw-r--r--parseExceptions.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/parseExceptions.js b/parseExceptions.js
new file mode 100644
index 0000000..63cd6d2
--- /dev/null
+++ b/parseExceptions.js
@@ -0,0 +1,66 @@
+
+const assert = require('node:assert').strict;
+
+function parseLine(line) {
+ const [datePart] = line.split(' ', 1);
+ assert.equal(datePart !== undefined, true, `otsikkoa ei annettu rivillä ”${line}”`);
+ const rest = line.substring(datePart.length + 1);
+ let dateStrings = datePart.split('-');
+ if (dateStrings.length === 1)
+ dateStrings.push(dateStrings[0]);
+ assert.equal(dateStrings.length, 2, `päivämääräväli ${datePart} on virheellinen (ks. rivi ${line})`);
+ let d1 = dateStrings[0].split('.');
+ const d2 = dateStrings[1].split('.');
+ assert.equal(d2.length, 3, `päivämäärästä ”${dateStrings[1]}” puuttui päivä, kuukausi tai vuosi tai se on muutoin virheellinen (ks. rivi ”${line}”)`);
+ while (d1.length < 3) {
+ d1.push(d2[d1.length])
+ }
+ for (let i = 0; i < 3; i++) {
+ d1[i] = +d1[i];
+ d2[i] = +d2[i];
+ let opts = ['päivä', 'kuukausi', 'vuosi'];
+ assert.ok(!isNaN(d1[i]), `syötetty ${opts[i]} ei koostunut pelkistä numeroista (ks. rivi ${line})`);
+ assert.ok(!isNaN(d2[i]), `syötetty ${opts[i]} ei koostunut pelkistä numeroista (ks. rivi ${line})`);
+ }
+ const start = new Date(d1[2], d1[1] - 1, d1[0]);
+ const end = new Date(d2[2], d2[1] - 1, d2[0]);
+
+ let [header, message = ''] = rest.split('|', 2);
+ assert.equal(header === undefined, false, 'otsikko täytyy antaa (ks. rivi ${line})');
+ header = header.trimEnd();
+ message = message.trimStart();
+
+ return [
+ start,
+ end,
+ header,
+ message
+ ];
+}
+assert.deepEqual(
+ parseLine('02.06.2024-07.08.2024 Hyvää kesää LYLLin väelle! | Kesäloma 2.6.-7.8.'),
+ [
+ new Date(2024, 5, 2),
+ new Date(2024, 7, 7),
+ 'Hyvää kesää LYLLin väelle!',
+ 'Kesäloma 2.6.-7.8.'
+ ]
+);
+
+async function updateExceptions(exceptions, DB) {
+ await DB.query_raw('DELETE FROM exceptions');
+ let dbOperations = [];
+ for (line of exceptions.split('\n')) {
+ if (line === '' || line[0] === '#')
+ continue
+ const [start, end, header, message] = parseLine(line);
+ dbOperations.push(DB.execute(
+ 'INSERT INTO exceptions VALUE (?, ?, ?, ?)',
+ [start, end, header, message]
+ ));
+ }
+ await Promise.all(dbOperations);
+ return 0;
+}
+
+exports.updateExceptions = updateExceptions;