first
This commit is contained in:
82
libs/db.js
Normal file
82
libs/db.js
Normal file
@@ -0,0 +1,82 @@
|
||||
import Database from "better-sqlite3";
|
||||
|
||||
const db = new Database("db.sqlite");
|
||||
|
||||
// init DB
|
||||
db.prepare(
|
||||
`CREATE TABLE IF NOT EXISTS time_ranges (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL DEFAULT '',
|
||||
range TEXT NOT NULL DEFAULT '',
|
||||
username TEXT NOT NULL DEFAULT ''
|
||||
)`
|
||||
).run();
|
||||
db.prepare(
|
||||
`CREATE TABLE IF NOT EXISTS configs (
|
||||
name TEXT PRIMARY KEY,
|
||||
value TEXT NOT NULL
|
||||
)`
|
||||
).run();
|
||||
db.prepare(
|
||||
`INSERT OR IGNORE INTO configs (name, value) VALUES ('limit', '1')`
|
||||
).run();
|
||||
db.prepare(
|
||||
`INSERT OR IGNORE INTO configs (name, value) VALUES ('token', 'woshimima')`
|
||||
).run();
|
||||
|
||||
// prepare statements
|
||||
const insertTimeRange = db.prepare(
|
||||
`INSERT INTO time_ranges (name, range) VALUES (?, ?)`
|
||||
);
|
||||
const getTimeRanges = db.prepare(`SELECT * FROM time_ranges`);
|
||||
const deleteTimeRange = db.prepare(`DELETE FROM time_ranges WHERE id = ?`);
|
||||
const updateUsername = db.prepare(
|
||||
`UPDATE time_ranges SET username = ? WHERE id = ?`
|
||||
);
|
||||
const countUser = db.prepare(
|
||||
`SELECT COUNT(*) as count FROM time_ranges WHERE username = ?`
|
||||
);
|
||||
const getUsername = db.prepare(`SELECT username FROM time_ranges WHERE id = ?`);
|
||||
const updateUsernameWithLimit = db.transaction((username, id, limit) => {
|
||||
const count = countUser.get(username).count;
|
||||
const existingUsername = getUsername.get(id).username;
|
||||
if (existingUsername !== "") {
|
||||
throw new Error("Username already exists");
|
||||
}
|
||||
if (count >= limit) {
|
||||
throw new Error("Limit reached");
|
||||
}
|
||||
updateUsername.run(username, id);
|
||||
});
|
||||
|
||||
const getConfigStmt = db.prepare(`SELECT value FROM configs WHERE name = ?`);
|
||||
const setConfigStmt = db.prepare(
|
||||
`UPDATE configs SET value = ? WHERE name = ?`
|
||||
);
|
||||
const getLimit = () => {
|
||||
const limit = getConfigStmt.get("limit").value;
|
||||
return parseInt(limit);
|
||||
};
|
||||
const setLimit = (limit) => {
|
||||
setConfigStmt.run(limit, "limit");
|
||||
};
|
||||
const getToken = () => {
|
||||
const token = getConfigStmt.get("token").value;
|
||||
return token;
|
||||
};
|
||||
|
||||
const authenticate = (token) => {
|
||||
const tokenFromDB = getToken();
|
||||
return token === tokenFromDB;
|
||||
};
|
||||
|
||||
export {
|
||||
insertTimeRange,
|
||||
getTimeRanges,
|
||||
deleteTimeRange,
|
||||
updateUsername,
|
||||
updateUsernameWithLimit,
|
||||
getLimit,
|
||||
setLimit,
|
||||
authenticate,
|
||||
};
|
||||
Reference in New Issue
Block a user