1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
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 (let line of exceptions.split('\n')) {
if ((line === '') || (line === '\r') || (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;
|