Skip to content

Commit 2e3d054

Browse files
committed
Add cron jon to delete inactive users + Update
1 parent bccea7e commit 2e3d054

9 files changed

+92
-6
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# db
22
*.sqlite
33

4+
users.json
5+
46
# Logs
57
logs
68
*.log

app.js

+11-3
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@ const { Ws, Api } = require("./config");
33
const DBSqlite3 = require("./db/DBSqlite3");
44
const def = require("./def");
55
const express = require("express");
6+
const nodeCron = require("node-cron");
7+
const { DBAdapter } = require("./db/Adapter");
68
require("dotenv").config();
79

810
const app = express();
11+
const api = new Api();
12+
const DBType = new DBSqlite3();
913

1014
def();
1115

12-
const api = new Api();
13-
1416
(async () => {
1517
await api.create();
1618

@@ -22,13 +24,19 @@ const api = new Api();
2224
false,
2325
);
2426

25-
const ws = new Ws({ url, accessToken: api.accessToken, DB: new DBSqlite3() });
27+
const ws = new Ws({ url, accessToken: api.accessToken, DB: DBType });
2628

2729
ws.logs();
2830
})();
2931

3032
const PORT = process.env.PORT;
3133

34+
nodeCron.schedule(`*/${process.env.CHECK_INACTIVE_USERS_DURATION} * * * *`, () => {
35+
const db = new DBAdapter(DBType);
36+
37+
db.deleteInactiveUsers();
38+
});
39+
3240
app.listen(PORT, () => {
3341
console.log(`Server running on port ${PORT}`);
3442
});

config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const { User, Server, IPGuard, File } = require("./utils");
33
const { default: axios } = require("axios");
44
const { DBAdapter } = require("./db/Adapter");
55
const { join } = require("path");
6-
const sqlite3 = require("sqlite3");
6+
const sqlite3 = require("sqlite3").verbose();
77
const DBSqlite3 = require("./db/DBSqlite3");
88

99
class Ws {

db/Adapter.js

+9
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,15 @@ class DBAdapter {
6969
addIp(email, ip) {
7070
return this.database.addIp(email, ip);
7171
}
72+
73+
/**
74+
* @description delete inactive users from database record
75+
* @returns {void}
76+
*/
77+
deleteInactiveUsers() {
78+
return this.database.deleteInactiveUsers()
79+
80+
}
7281
}
7382

7483
module.exports = { DBAdapter };

db/DBSqlite3.js

+44-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const { join } = require("path");
22
const { DBInterface } = require("../interface");
3-
const sqlite3 = require("sqlite3");
3+
const sqlite3 = require("sqlite3").verbose();
44
const { File } = require("../utils");
55

66
function connect() {
@@ -138,6 +138,49 @@ class DBSqlite3 extends DBInterface {
138138
});
139139
});
140140
}
141+
142+
deleteInactiveUsers() {
143+
const currentTime = new Date().getTime();
144+
const fiveMinutesAgo = new Date(
145+
currentTime - process.env.CHECK_INACTIVE_USERS_DURATION * 60 * 1000,
146+
);
147+
148+
db.serialize(function () {
149+
db.all(
150+
`SELECT * FROM users WHERE json_extract(ips, '$[0].date') <= ?`,
151+
fiveMinutesAgo.toISOString(),
152+
function (err, rows) {
153+
if (err) {
154+
console.error(err);
155+
return;
156+
}
157+
158+
rows.forEach(function (row) {
159+
const email = row.email;
160+
const ips = JSON.parse(row.ips);
161+
162+
const updatedIds = ips.filter(function (id) {
163+
const idDate = new Date(id.date);
164+
return idDate > fiveMinutesAgo;
165+
});
166+
167+
db.run(
168+
`UPDATE users SET ips = ? WHERE email = ?`,
169+
JSON.stringify(updatedIds),
170+
email,
171+
function (err) {
172+
if (err) {
173+
console.error(err);
174+
return;
175+
}
176+
console.log(`Record with email ${email} updated.`);
177+
},
178+
);
179+
});
180+
},
181+
);
182+
});
183+
}
141184
}
142185

143186
module.exports = DBSqlite3;

ecosystem.config.js

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ module.exports = {
2020
NODE_ENV: "development",
2121
PORT: 4000,
2222
watch: true,
23-
watch_delay: 3000,
2423
ignore_watch: [
2524
"./node_modules",
2625
"./package.json",

interface.js

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ class DBInterface {
2222
addIp(email, ip) {
2323
throw new Error("This method must be implemented in the class");
2424
}
25+
26+
deleteInactiveUsers() {
27+
throw new Error("This method must be implemented in the class");
28+
}
2529
}
2630

2731
class LuIPInterface {

package-lock.json

+20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"body-parser": "^1.20.2",
2424
"dotenv": "^16.3.1",
2525
"express": "^4.18.2",
26+
"node-cron": "^3.0.2",
2627
"node-html-parser": "^6.1.5",
2728
"pm2": "^5.3.0",
2829
"sqlite3": "^5.1.6",

0 commit comments

Comments
 (0)