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) {
>
修改上限
+
+