-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsql.js
120 lines (115 loc) · 3.91 KB
/
sql.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
const sqlite3 = require('sqlite3')
const fs = require('fs')
const path = require('path')
const logger = require('./log.js')
var db;
const tableName = 'users';
const desiredColumns = {
id: 'INTEGER PRIMARY KEY',
money: 'INTEGER DEFAULT 0',
scavengeTimestamp: 'INTEGER DEFAULT 0',
}
module.exports = {
database:db,
promise:function(dbfunc, ...args){
const that = this;
return new Promise(function(resolve, reject) {
dbfunc(...args,function(err, res){
if(err) reject(err);
else resolve(res);
});
});
},
connect:async()=>{
// logger.info('Connecting to database...');
db = new sqlite3.Database(path.join(__dirname, 'db/users.sqlite'), err=>{
if(err) {
console.error('[FATAL]: There was a problem connecting to the database: '+err+'\nStack Trace:\n'+err.stack);
throw err; // required, throw an error here.
}
});
const createTableQuery = `
CREATE TABLE IF NOT EXISTS ${tableName} (
${Object.entries(desiredColumns)
.map(([column, type]) => `${column} ${type}`)
.join(', ')}
)
`;
db.run(createTableQuery, (err) => {
if (err) {
console.error('Error creating table:', err.message);
} else {
console.log(`Table ${tableName} created or already exists.`);
appendColumns(); // Proceed to check for missing columns
}
});
},
//add user if they dont exist:
addUser:async(userId,func=null)=>{
return await db.run(`INSERT OR IGNORE INTO users (id) VALUES (?)`, [userId], func);
},
//add money to user column:
addMoney:async(userId, amount, func=null)=>{
return await db.run(`UPDATE users SET money = money + ${amount} WHERE id = ?`, [userId], func);
},
setMoney:async(userId, amount, func=null)=>{
return await db.run(`UPDATE users SET money = ${amount} WHERE id = ?`, [userId], func);
},
delMoney:async(userId, amount, func=null)=>{
return await db.run(`UPDATE users SET money = money - ${amount} WHERE id = ?`, [userId], func);
},
getMoney:async(userId, func=null)=>{
const result = await db.get(`SELECT money FROM users WHERE id = ?`, [userId], func);
return result.money;
},
wipeDatabase:async(func=null)=>{
return await db.run(`DELETE FROM users`, func);
},
getAllUsers:async(func=null)=>{
const result = await db.all(`SELECT * FROM users`, func);
return result;
},
getUser:async(userId, func=null)=>{
const result = await db.get(`SELECT * FROM users WHERE id = ?`, [userId], func);
return result;
},
resetMoney:async(userId, func=null)=>{
return await db.run(`UPDATE users SET money = 0 WHERE id = ?`, [userId], func);
},
resetAllMoney:async(func=null)=>{
return await db.run(`UPDATE users SET money = 0`, func);
},
addMoneyAll:async(amount, func=null)=>{
return await db.run(`UPDATE users SET money = money + ${amount}`, func);
},
delMoneyAll:async(amount, func=null)=>{
return await db.run(`UPDATE users SET money = money - ${amount}`, func);
},
setMoneyAll:async(amount, func=null)=>{
return await db.run(`UPDATE users SET money = ${amount}`, func);
},
setScavengeTimestamp:async(userId, timestamp, func=null)=>{
return await db.run(`UPDATE users SET scavengeTimestamp = ${timestamp} WHERE id = ?`, [userId], func);
},
getScavengeTimestamp:async(userId, func=null)=>{
const result = await db.get(`SELECT scavengeTimestamp FROM users WHERE id = ?`, [userId], func);
return result.scavengeTimestamp;
},
}
function appendColumns(){
Object.entries(desiredColumns).forEach(([column, type]) => {
const alterTableQuery = `ALTER TABLE ${tableName} ADD COLUMN ${column} ${type}`;
db.run(alterTableQuery, (err) => {
if (err) {
// Ignore errors that indicate the column already exists
if (err.message.includes('duplicate column name')) {
console.log(`Column ${column} already exists. Skipping addition.`);
} else {
console.error(`Error adding column ${column}:`, err.message);
}
} else {
console.log(`Column ${column} added to ${tableName}.`);
}
});
});
}