This commit is contained in:
2022-03-31 12:06:31 +08:00
parent 75a366ae11
commit 7e4c106683
10 changed files with 1905 additions and 459 deletions

82
libs/db.js Normal file
View 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,
};