diff options
Diffstat (limited to 'backend/main.py')
| -rw-r--r-- | backend/main.py | 85 |
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") |
