summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/__pycache__/main.cpython-314.pycbin4703 -> 11779 bytes
-rw-r--r--backend/db.dbbin8192 -> 0 bytes
-rw-r--r--backend/db.db-journalbin4616 -> 0 bytes
-rw-r--r--backend/main.py142
4 files changed, 127 insertions, 15 deletions
diff --git a/backend/__pycache__/main.cpython-314.pyc b/backend/__pycache__/main.cpython-314.pyc
index 35af45c..34bd8f7 100644
--- a/backend/__pycache__/main.cpython-314.pyc
+++ b/backend/__pycache__/main.cpython-314.pyc
Binary files differ
diff --git a/backend/db.db b/backend/db.db
deleted file mode 100644
index 20ded47..0000000
--- a/backend/db.db
+++ /dev/null
Binary files differ
diff --git a/backend/db.db-journal b/backend/db.db-journal
deleted file mode 100644
index b0fb71e..0000000
--- a/backend/db.db-journal
+++ /dev/null
Binary files differ
diff --git a/backend/main.py b/backend/main.py
index 8b8a3d1..7593f23 100644
--- a/backend/main.py
+++ b/backend/main.py
@@ -5,8 +5,9 @@ from typing import Annotated
import datetime
from pydantic import BaseModel
from apscheduler.schedulers.background import BackgroundScheduler
-import firebase_admin
-from firebase_admin import credentials
+import secrets
+from enum import Enum
+from fastapi.responses import PlainTextResponse
app = fastapi.FastAPI(title="Victoria Hall LaundryWeb", description="LaundryWeb Backend API", version="0.1")
conn = sqlite3.connect("db.db", check_same_thread=False)
@@ -15,8 +16,6 @@ cursor = conn.cursor()
scheduler = BackgroundScheduler()
scheduler.start()
-firebase_app = firebase_admin.initialize_app(credentials.Certificate("serviceAccountKey.json"))
-
origins = [
"http://localhost",
"http://localhost:998",
@@ -24,6 +23,7 @@ origins = [
"http://127.0.0.1",
"http://127.0.0.1:998",
"http://127.0.0.1:5173",
+ "https://laundryweb.altafcreator.com"
]
app.add_middleware(
@@ -37,12 +37,12 @@ app.add_middleware(
cursor.execute("""
CREATE TABLE IF NOT EXISTS timers (
timer_id INTEGER PRIMARY KEY,
- user_id VARCHAR(16) NOT NULL,
+ user_id VARCHAR(64) NOT NULL,
start_time TEXT NOT NULL,
duration INT NOT NULL,
block INT NOT NULL,
machine INT NOT NULL,
- status TEXT NOT NULL CHECK(status IN ('Running', 'Finished'))
+ status TEXT NOT NULL CHECK(status IN ('RUNNING', 'FINISHED'))
);
""") # block is either 1 or 2, machine (1-4), odd is dryer, even is machine.
@@ -53,33 +53,145 @@ class RequestData(BaseModel):
machine: int
+class BlockRequestData(BaseModel):
+ block: int
+
+
+class Status(Enum):
+ EMPTY = 0,
+ FINISHED = 1,
+ RUNNING = 2,
+ OUTOFSERVICE = 3,
+
+
+machine_status = [[Status.EMPTY.name, Status.EMPTY.name, Status.EMPTY.name, Status.EMPTY.name],
+ [Status.EMPTY.name, Status.EMPTY.name, Status.EMPTY.name, Status.EMPTY.name]]
+machine_times = [[None, None, None, None],
+ [None, None, None, None]]
+machine_durations = [[None, None, None, None],
+ [None, None, None, None]]
+
+
def reminder_timer_finished(timer_id):
+ print("timer almost finished", timer_id)
+ end_date = datetime.datetime.now() + datetime.timedelta(seconds=5)
+ scheduler.add_job(final_timer_finished, 'date', run_date=end_date, id=timer_id, args=[timer_id])
+ cursor.execute(f"SELECT * FROM timers WHERE timer_id = '{timer_id}'")
+ out = cursor.fetchall()
+ for row in out:
+ machine_status[row[3] - 1][row[4] - 1] = Status.FINISHED.name
+
+
+def final_timer_finished(timer_id):
print("timer finished!1", timer_id)
+ cursor.execute(f"SELECT * FROM timers WHERE timer_id = '{timer_id}'")
+ out = cursor.fetchall()
+ for row in out:
+ machine_status[row[3] - 1][row[4] - 1] = Status.EMPTY.name
+ machine_times[row[3] - 1][row[4] - 1] = None
+ machine_durations[row[3] - 1][row[4] - 1] = None
cursor.execute(f"DELETE FROM timers WHERE timer_id = {timer_id}")
+ conn.commit()
-def final_timer_finished():
- pass
+def create_session(response: fastapi.Response):
+ cookie = secrets.token_hex(32)
+ response.set_cookie(key="session_key", value=cookie)
+ return cookie
-@app.post("/start")
-def start_new_timer(data: RequestData, session_key: Annotated[str | None, fastapi.Cookie()] = None):
- if session_key:
+
+# --- starting new timer
+@app.post("/start", response_class=PlainTextResponse)
+async def start_new_timer(data: RequestData, response: fastapi.Response, session_key: Annotated[str | None, fastapi.Cookie()] = None):
+ now = datetime.datetime.now()
+ try:
+ if not session_key:
+ print("no session key, creating.")
+ session_key = create_session(response)
+ except Exception as exception:
+ print("err @ key creation //", exception)
+ return "something went wrong during session key creation"
+
+ try:
print("session key valid", session_key)
cursor.execute(f"""
INSERT INTO timers (user_id, start_time, duration, block, machine, status)
- VALUES ('{session_key}', '{datetime.datetime.now().isoformat()}', {data.block}, {data.machine}, {data.duration}, 'Running')
+ VALUES ('{session_key}', '{now.isoformat()}', {data.block}, {data.machine}, {data.duration * 30}, 'RUNNING')
""")
conn.commit()
- cursor.execute(f"SELECT * FROM timers WHERE user_id = {session_key}")
+ cursor.execute("SELECT * FROM timers;")
out = cursor.fetchall()
for row in out:
print(row)
- end_date = datetime.datetime.now() + datetime.timedelta(seconds=data.duration)
+ end_date = now + datetime.timedelta(minutes=(data.duration * 30) - 5)
timer_id = str(out[len(out) - 1][0])
print("timer id", timer_id)
+ except Exception as exception:
+ print("err @ sql stuff //", exception)
+ return "something went wrong during sql stuff"
+ try:
scheduler.add_job(reminder_timer_finished, 'date', run_date=end_date, id=timer_id, args=[timer_id])
+ except Exception as exception:
+ print("err @ scheduler //", exception)
+ return "something went wrong during scheduler stuff"
+
+ try:
+ machine_status[data.block - 1][data.machine - 1] = Status.RUNNING.name
+ machine_times[data.block - 1][data.machine - 1] = now.isoformat()
+ machine_durations[data.block - 1][data.machine - 1] = data.duration * 30
+ except Exception as exception:
+ print("err @ machine_status //", exception)
+ return "something went wrong during machine_status setting somehow"
+
+ return "all good bro timer started"
+
+
+# --- check whether user has laundry or not
+@app.post("/check", response_class=PlainTextResponse)
+def check_status(session_key: Annotated[str | None, fastapi.Cookie()] = None):
+ cursor.execute(f"SELECT * FROM timers WHERE user_id = '{session_key}'")
+ out = cursor.fetchall()
+ for row in out:
+ print(row)
+
+ if len(out) > 0:
+ return "you got laundry"
+ else:
+ return "no got laundry"
+
+
+# --- fetch machine status for block
+@app.post("/status")
+def get_machine_status(data: BlockRequestData):
+ block_idx = data.block - 1
+ return [machine_status[block_idx], machine_times[block_idx], machine_durations[block_idx]]
+
+
+# --- get laundr(y/ies) information of user
+@app.post("/laundry")
+def get_laundry_info(session_key: Annotated[str | None, fastapi.Cookie()] = None):
+ if session_key:
+ result = []
+
+ cursor.execute(f"SELECT * FROM timers WHERE user_id = '{session_key}'")
+ out = cursor.fetchall()
+ for row in out:
+ curr_timer = {
+ "duration": 0,
+ "start_time": 0,
+ "machine": 0,
+ "status": "RUNNING",
+ }
+ curr_timer["duration"] = row[5]
+ curr_timer["start_time"] = row[2]
+ curr_timer["machine"] = row[4]
+ curr_timer["status"] = row[6]
+
+ result.append(curr_timer)
+
+ return result
else:
- print("no session key")
+ return "you got no session key cookie how am i supposed to identify you"