summaryrefslogtreecommitdiff
path: root/backend/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'backend/main.py')
-rw-r--r--backend/main.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/backend/main.py b/backend/main.py
new file mode 100644
index 0000000..8b8a3d1
--- /dev/null
+++ b/backend/main.py
@@ -0,0 +1,85 @@
+import fastapi
+from fastapi.middleware.cors import CORSMiddleware
+import sqlite3
+from typing import Annotated
+import datetime
+from pydantic import BaseModel
+from apscheduler.schedulers.background import BackgroundScheduler
+import firebase_admin
+from firebase_admin import credentials
+
+app = fastapi.FastAPI(title="Victoria Hall LaundryWeb", description="LaundryWeb Backend API", version="0.1")
+conn = sqlite3.connect("db.db", check_same_thread=False)
+cursor = conn.cursor()
+
+scheduler = BackgroundScheduler()
+scheduler.start()
+
+firebase_app = firebase_admin.initialize_app(credentials.Certificate("serviceAccountKey.json"))
+
+origins = [
+ "http://localhost",
+ "http://localhost:998",
+ "http://localhost:5173",
+ "http://127.0.0.1",
+ "http://127.0.0.1:998",
+ "http://127.0.0.1:5173",
+]
+
+app.add_middleware(
+ CORSMiddleware,
+ allow_origins=origins,
+ allow_credentials=True,
+ allow_methods=["*"],
+ allow_headers=["*"],
+)
+
+cursor.execute("""
+CREATE TABLE IF NOT EXISTS timers (
+ timer_id INTEGER PRIMARY KEY,
+ user_id VARCHAR(16) 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'))
+);
+ """) # block is either 1 or 2, machine (1-4), odd is dryer, even is machine.
+
+
+class RequestData(BaseModel):
+ duration: int
+ block: int
+ machine: int
+
+
+def reminder_timer_finished(timer_id):
+ print("timer finished!1", timer_id)
+ cursor.execute(f"DELETE FROM timers WHERE timer_id = {timer_id}")
+
+def final_timer_finished():
+ pass
+
+
+@app.post("/start")
+def start_new_timer(data: RequestData, session_key: Annotated[str | None, fastapi.Cookie()] = None):
+ if session_key:
+ 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')
+ """)
+ conn.commit()
+ cursor.execute(f"SELECT * FROM timers WHERE user_id = {session_key}")
+ out = cursor.fetchall()
+ for row in out:
+ print(row)
+
+ end_date = datetime.datetime.now() + datetime.timedelta(seconds=data.duration)
+ timer_id = str(out[len(out) - 1][0])
+
+ print("timer id", timer_id)
+
+ scheduler.add_job(reminder_timer_finished, 'date', run_date=end_date, id=timer_id, args=[timer_id])
+ else:
+ print("no session key")