-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathform.js
78 lines (70 loc) · 2.13 KB
/
form.js
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
68
69
70
71
72
73
74
75
76
77
78
const fs = require("fs");
const bluebird = require("bluebird");
const dbFile = "./.data/entries.db";
const dbFileExists = fs.existsSync(dbFile);
const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database(dbFile);
db.serialize(() => {
if (!dbFileExists) {
db.run(
"CREATE TABLE entries (sessionId TEXT PRIMARY KEY, name TEXT, entry1 INTEGER, entry2 INTEGER, entry3 INTEGER, entry4 INTEGER, entry5 INTEGER)"
);
}
});
module.exports = {
insertEntry(sessionId, data, callback) {
const entryData = {
$sessionId: sessionId,
$name: data.name,
$entry1: data.entry1 === "on" ? 1 : 0,
$entry2: data.entry2 === "on" ? 1 : 0,
$entry3: data.entry3 === "on" ? 1 : 0,
$entry4: data.entry4 === "on" ? 1 : 0,
$entry5: data.entry5 === "on" ? 1 : 0,
};
db.serialize(() => {
db.run(
`INSERT INTO entries(sessionId, name, entry1, entry2, entry3, entry4, entry5)
VALUES($sessionId, $name, $entry1, $entry2, $entry3, $entry4, $entry5)
ON CONFLICT(sessionId) DO UPDATE SET name=$name, entry1=$entry1, entry2=$entry2, entry3=$entry3, entry4=$entry4, entry5=$entry5`,
entryData,
() => {
callback(
JSON.stringify({
message: "Entry registered",
})
);
}
);
});
},
getWinners(prize, number) {
return new bluebird((resolve, reject) => {
db.all(`SELECT name from entries where entry${prize}=1`, function (
err,
rows
) {
let entrants = rows.map((row) => row.name);
const winners = [];
for (let i = 0; i < number; i++) {
const winner = entrants[Math.floor(Math.random() * entrants.length)];
winners.push(winner);
entrants = entrants.filter((entrant) => entrant !== winner);
}
resolve(winners);
});
});
},
getEntries() {
return new bluebird((resolve, reject) => {
db.all(`SELECT * from entries`, function (err, rows) {
resolve(rows);
});
});
},
clear(callback) {
db.serialize(() => {
db.run("DELETE FROM entries", callback);
});
},
};