diff options
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/__pycache__/main.cpython-314.pyc | bin | 0 -> 4703 bytes | |||
| -rw-r--r-- | backend/db.db | bin | 0 -> 8192 bytes | |||
| -rw-r--r-- | backend/db.db-journal | bin | 0 -> 4616 bytes | |||
| -rw-r--r-- | backend/main.py | 85 | ||||
| -rw-r--r-- | backend/serviceAccountKey.json | 13 |
5 files changed, 98 insertions, 0 deletions
diff --git a/backend/__pycache__/main.cpython-314.pyc b/backend/__pycache__/main.cpython-314.pyc Binary files differnew file mode 100644 index 0000000..35af45c --- /dev/null +++ b/backend/__pycache__/main.cpython-314.pyc diff --git a/backend/db.db b/backend/db.db Binary files differnew file mode 100644 index 0000000..20ded47 --- /dev/null +++ b/backend/db.db diff --git a/backend/db.db-journal b/backend/db.db-journal Binary files differnew file mode 100644 index 0000000..b0fb71e --- /dev/null +++ b/backend/db.db-journal 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" +} |
