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")
|