104 lines
2.7 KiB
JavaScript
104 lines
2.7 KiB
JavaScript
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();
|
|
db.prepare(
|
|
`INSERT OR IGNORE INTO configs (name, value) VALUES ('started', 'false')`
|
|
).run();
|
|
|
|
// prepare statements
|
|
const insertTimeRange = db.prepare(
|
|
`INSERT INTO time_ranges (name, range) VALUES (?, ?)`
|
|
);
|
|
const getTimeRanges = db.prepare(`SELECT * FROM time_ranges ORDER BY range, name`);
|
|
const deleteTimeRange = db.prepare(`DELETE FROM time_ranges WHERE id = ?`);
|
|
const update = db.prepare(
|
|
`UPDATE time_ranges SET name = ?, range = ?, username = ? 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 (!getStarted()) {
|
|
throw new Error("还没到开始时间喔");
|
|
}
|
|
if (existingUsername !== "") {
|
|
throw new Error("这个时间段已经有人了喔");
|
|
}
|
|
if (count >= limit) {
|
|
throw new Error("达到数量上限啦");
|
|
}
|
|
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;
|
|
};
|
|
|
|
const getStarted = () => {
|
|
const started = getConfigStmt.get("started").value;
|
|
return started === "true";
|
|
};
|
|
|
|
const setStarted = (started) => {
|
|
const started_string = started ? "true" : "false";
|
|
setConfigStmt.run(started_string, "started");
|
|
};
|
|
|
|
export {
|
|
insertTimeRange,
|
|
getTimeRanges,
|
|
deleteTimeRange,
|
|
update,
|
|
updateUsername,
|
|
updateUsernameWithLimit,
|
|
getLimit,
|
|
setLimit,
|
|
authenticate,
|
|
getStarted,
|
|
setStarted,
|
|
};
|