diff --git a/libs/db.js b/libs/db.js index 8aea6e7..085dd1b 100644 --- a/libs/db.js +++ b/libs/db.js @@ -23,6 +23,9 @@ db.prepare( 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( @@ -40,6 +43,9 @@ 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("这个时间段已经有人了喔"); } @@ -50,9 +56,7 @@ const updateUsernameWithLimit = db.transaction((username, id, limit) => { }); const getConfigStmt = db.prepare(`SELECT value FROM configs WHERE name = ?`); -const setConfigStmt = db.prepare( - `UPDATE configs SET value = ? WHERE name = ?` -); +const setConfigStmt = db.prepare(`UPDATE configs SET value = ? WHERE name = ?`); const getLimit = () => { const limit = getConfigStmt.get("limit").value; return parseInt(limit); @@ -70,6 +74,16 @@ const authenticate = (token) => { 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, @@ -79,4 +93,6 @@ export { getLimit, setLimit, authenticate, + getStarted, + setStarted, }; diff --git a/pages/api/time/started.js b/pages/api/time/started.js new file mode 100644 index 0000000..379f67a --- /dev/null +++ b/pages/api/time/started.js @@ -0,0 +1,27 @@ +import { authenticate, getStarted, setStarted } from "../../../libs/db"; + +export default function handler(req, res) { + // get method + if (req.method === "GET") { + res.setHeader("Cache-Control", "no-cache no-store must-revalidate"); + res.status(200).json(getStarted()); + return; + } else if (req.method === "PUT") { + // authenticate + const { token } = req.body; + if (!authenticate(token)) { + res.status(401).json({ + error: `token ${token} 验证失败`, + }); + return; + } + // set method + const { started } = req.body; + setStarted(started); + res.status(200).json({ + success: true, + }); + } else { + res.status(405).send({ error: "方法" + req.method + "不被允许" }); + } +} diff --git a/pages/time.js b/pages/time.js index 3defcfc..07f36ae 100644 --- a/pages/time.js +++ b/pages/time.js @@ -29,6 +29,25 @@ export default function Time(props) { const router = useRouter(); + const setStarted = (started) => { + fetch("/api/time/started", { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ token, started }), + }) + .then((res) => res.json()) + .then((res) => { + if (res.error) { + setSnackbarError(true); + setSnackbarErrorMessage(res.error); + } else { + setSnackbarSuccess(true); + } + }); + }; + const isAdmin = () => { if (props.username === "admin") { return true; @@ -226,6 +245,20 @@ export default function Time(props) { > 修改上限 + +