summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/__pycache__/main.cpython-314.pycbin0 -> 4703 bytes
-rw-r--r--backend/db.dbbin0 -> 8192 bytes
-rw-r--r--backend/db.db-journalbin0 -> 4616 bytes
-rw-r--r--backend/main.py85
-rw-r--r--backend/serviceAccountKey.json13
5 files changed, 98 insertions, 0 deletions
diff --git a/backend/__pycache__/main.cpython-314.pyc b/backend/__pycache__/main.cpython-314.pyc
new file mode 100644
index 0000000..35af45c
--- /dev/null
+++ b/backend/__pycache__/main.cpython-314.pyc
Binary files differ
diff --git a/backend/db.db b/backend/db.db
new file mode 100644
index 0000000..20ded47
--- /dev/null
+++ b/backend/db.db
Binary files differ
diff --git a/backend/db.db-journal b/backend/db.db-journal
new file mode 100644
index 0000000..b0fb71e
--- /dev/null
+++ b/backend/db.db-journal
Binary files differ
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")
diff --git a/backend/serviceAccountKey.json b/backend/serviceAccountKey.json
new file mode 100644
index 0000000..e2f09e2
--- /dev/null
+++ b/backend/serviceAccountKey.json
@@ -0,0 +1,13 @@
+{
+ "type": "service_account",
+ "project_id": "victoria-hall-laundryweb-cm",
+ "private_key_id": "597c9fc3dafbaf9a99fa51776fc0e78f7bde9e7d",
+ "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDeEuAMyzZHDFOS\n4PPYMpTJtGyos14X2m7Tv5p+0ndJF8mb8g2yWGsq13wXebcXWzSwg98Dy0TBFsKN\njP+iXZ0KN7upG5LEW/M7sKl2oIC/IgnCvnrNqYHrK6BCKJ87jhxVoz5b/WE9yg+8\nVzBMDXKJaaZBVVV3p+UVQydiRd9qDYClRgU4wzGK3/B6hSYFmK66YslAUp/roERM\nkF3F+YRrli5iSvzf9+oyrv5W5SMQ5qdmhh2daNEFWyev9psOmKxVZ8iYi/tQdyrj\nlCX6ggcoJSDwKIbglasqscwwIV28PXDqLWKOvLa3lshaG7lZECra0ucTz+yv9KKx\nY+lJBkiLAgMBAAECggEAaN3J7lCxt1gzSOswStoL17n7C6jz2Fi+OADFMHkrehkh\nC6KAZEULikYKY72Gv6FCns4O7Gg69eFNCvHXr3D8XNxXojISmuX+1KOGSq3dTiSB\nLnSrYd3XK1nFCijLlKB1cd0t79uVZUu7JYmYlXlOKmR47WYh/2iJrYIyIV50c0u+\nRdtMQN4bIY2X9inlSd5IAeW9P6SCeHwaLGCJtKGbZ2d9Akseyi8r4yyzt2U2e8Cz\nAsY3qVlcdxqCY7BprhFbgOg/F6ahtLbZgEZBDqEjFBXUO78oTd1erKcqwq2hu+DB\n7D7JndCRGbJUGtX3HDNq79zxsCPMO7TrArAGZg0sBQKBgQD/nyTN7wqgshbYnTVh\nF3r9nw3NC3iuyo2EnVXDj6IC0EIxc9FzvuqDt7MaoN2PrvFEqfELX6AOYSQFdM4o\nWPz32jrmYiLpIUBfGwsedSF9PC1rwF/V2EKsVlpOJhM3ff0q+NNrCXOCcrO6S6ci\nYzEGu6nK/L8gVZgK3zxLF+ATjwKBgQDeZwUcVhBmEQRocuvnsPwapg+V3YZp6Oe+\nvdxHhfIOqXyTXokUBNL/tqyrMxduHgOsa50FcJQlt2T2CCEUKOZie2aW8h9jgzmK\nYy8H1hgqJ3PuVWod0pADmR6BucvewG7SYtJloi3FQoNwjPnpQPgs5nPOXn/NYPDd\nMZwsxNFNRQKBgQD4gt2jH7wzUjAH036rr8owe8tNBtQDCoTe4p8YirE1DwbrUO/W\nGUuhVpxXTQFZyPhiitz+866FjEcazt4GN81noNAWXl4WS+9rBr2elL1EJZb65IHH\nQoI/TYxp4XZZQrE4b8QKkZusvJqiiR4pvklRhGykHWgqpUw1daYGU2XTXQKBgQCS\no2RoQYrAcVnxsExA0J34yCMgkhZNAIbEahSyh+uIpVGBLWS+cUvZ1M1Wd/Jr5ZhQ\neAfpDUhw8dG8srF0xF7a8jg7MFtn1p760tiwlwYJzUeQDntQPIQ+CxhlOmbkcQbg\n6s2Eu4DoPinB7QHePLslh7E1kXM8rD1D6rDph7/k7QKBgA/mv928mWQ2WgcFEhZ3\nvKVFZgynklAHlby/RDyLETkvPwp3a54vWR1aeFhy39qcx6R6LsDkPbHUvaLPodHv\n+URzuZYr/bmVCqPbCDfXZ5A1OaUZDonwID6rJ7RLbo6VykEREQI0q7atLOInC6za\n/+9sIal321qEzmAKpEhvuUbi\n-----END PRIVATE KEY-----\n",
+ "client_email": "firebase-adminsdk-fbsvc@victoria-hall-laundryweb-cm.iam.gserviceaccount.com",
+ "client_id": "102261899996446059087",
+ "auth_uri": "https://accounts.google.com/o/oauth2/auth",
+ "token_uri": "https://oauth2.googleapis.com/token",
+ "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
+ "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-fbsvc%40victoria-hall-laundryweb-cm.iam.gserviceaccount.com",
+ "universe_domain": "googleapis.com"
+}