summaryrefslogtreecommitdiff
path: root/backend/main.py
blob: 8b8a3d1c27d802761276d1095f12b5fceedf30a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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")