-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathVisitHistory.class.js
92 lines (77 loc) · 3.03 KB
/
VisitHistory.class.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const db = require('./DB.class');
class VisitHistory {
async generateNewSession() {
return new Promise(async (resolve, reject) => {
let token = VisitHistory.generate_token(64);
while (await this.sessionExist(token)) token = VisitHistory.generate_token(64);
db.query('INSERT INTO `user_session` SET ?', {
token,
}, function (error, results, fields) {
if (error) reject(error);
resolve(token);
});
});
}
newHistoryRow(token, streamerName) {
new Promise(async () => {
let userId = await this.getUserId(token);
if (userId) db.query('INSERT INTO `user_visits` SET ?', {
user_id: userId,
streamer_id: await this.getStreamerId(streamerName),
date: new Date(),
});
});
}
async getVisits(token) {
return new Promise(async (resolve, reject) => {
let userId = await this.getUserId(token);
if (userId) db.query('SELECT date, name FROM `user_visits` u JOIN `streamers` s ON (u.streamer_id = s.id) WHERE user_id = ? ORDER BY date DESC', [userId], function (error, results, fields) {
if (error) reject(error);
resolve(results.map(e => {
return {date: e.date, name: e.name}
}));
});
});
}
async sessionExist(token) {
return new Promise((resolve, reject) => {
db.query('SELECT * FROM `user_session` WHERE token = ?', [token], function (error, results, fields) {
if (error) reject(error);
resolve(results.length >= 1);
});
});
}
async getUserId(token) {
return new Promise((resolve, reject) => {
db.query('SELECT * FROM `user_session` WHERE token = ?', [token], function (error, results, fields) {
if (error) reject(error);
if (results.length >= 1) resolve(results[0].id);
else resolve(false);
});
});
}
async getStreamerId(streamer) {
return new Promise((resolve, reject) => {
db.query('SELECT * FROM `streamers` WHERE name = ?', [streamer], function (error, results, fields) {
if (error) reject(error);
if (results.length >= 1) resolve(results[0].id);
else db.query('INSERT INTO `streamers` SET ?', {name: streamer}, function (error, results, fields) {
if (error) reject(error);
resolve(results.insertId);
})
});
});
}
static generate_token(length) {
let a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".split("");
let b = [];
for (let i = 0; i < length; i++) {
let j = (Math.random() * (a.length - 1)).toFixed(0);
b[i] = a[j];
}
return b.join("");
}
}
module.exports = () => {
return new VisitHistory();
};