summaryrefslogtreecommitdiff
path: root/backend/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'backend/main.py')
-rw-r--r--backend/main.py58
1 files changed, 50 insertions, 8 deletions
diff --git a/backend/main.py b/backend/main.py
index 7593f23..0042dba 100644
--- a/backend/main.py
+++ b/backend/main.py
@@ -72,24 +72,51 @@ machine_durations = [[None, None, None, None],
[None, None, None, None]]
+# this method checks for any entry, and starts the previously-terminated schedules
+# useful if you're restarting the server
+def restart_terminated_schedules():
+ cursor.execute("SELECT * FROM timers;")
+ out = cursor.fetchall()
+ print("unfinished timers: " + str(len(out)))
+
+ for row in out:
+ print(row)
+ end_date = datetime.datetime.fromisoformat(row[2]) + datetime.timedelta(minutes=row[3])
+ now = datetime.datetime.now()
+
+ if now > end_date:
+ print("unfinished timer was long gone")
+ scheduler.add_job(final_timer_finished, 'date', run_date=(now + datetime.timedelta(seconds=1)), id=str(row[0]), args=[row[0]])
+ elif now + datetime.timedelta(minutes=5) > end_date:
+ print("unfinished timer ends in less than five mins")
+ scheduler.add_job(final_timer_finished, 'date', run_date=end_date, id=str(row[0]), args=[row[0]])
+ else:
+ print("unfinished timer scheduler started")
+ print(row[0])
+ scheduler.add_job(reminder_timer_finished, 'date', run_date=end_date, id=str(row[0]), args=[row[0]])
+
+
def reminder_timer_finished(timer_id):
print("timer almost finished", timer_id)
end_date = datetime.datetime.now() + datetime.timedelta(seconds=5)
scheduler.add_job(final_timer_finished, 'date', run_date=end_date, id=timer_id, args=[timer_id])
cursor.execute(f"SELECT * FROM timers WHERE timer_id = '{timer_id}'")
out = cursor.fetchall()
+
for row in out:
- machine_status[row[3] - 1][row[4] - 1] = Status.FINISHED.name
+ machine_status[row[4] - 1][row[5] - 1] = Status.FINISHED.name
def final_timer_finished(timer_id):
print("timer finished!1", timer_id)
cursor.execute(f"SELECT * FROM timers WHERE timer_id = '{timer_id}'")
out = cursor.fetchall()
+
for row in out:
- machine_status[row[3] - 1][row[4] - 1] = Status.EMPTY.name
- machine_times[row[3] - 1][row[4] - 1] = None
- machine_durations[row[3] - 1][row[4] - 1] = None
+ machine_status[row[4] - 1][row[5] - 1] = Status.EMPTY.name
+ machine_times[row[4] - 1][row[5] - 1] = None
+ machine_durations[row[4] - 1][row[5] - 1] = None
+
cursor.execute(f"DELETE FROM timers WHERE timer_id = {timer_id}")
conn.commit()
@@ -100,6 +127,14 @@ def create_session(response: fastapi.Response):
return cookie
+# ## beginning
+
+print("Hello, world!")
+restart_terminated_schedules()
+
+
+# ## api endpoints
+
# --- starting new timer
@app.post("/start", response_class=PlainTextResponse)
async def start_new_timer(data: RequestData, response: fastapi.Response, session_key: Annotated[str | None, fastapi.Cookie()] = None):
@@ -116,11 +151,12 @@ async def start_new_timer(data: RequestData, response: fastapi.Response, session
print("session key valid", session_key)
cursor.execute(f"""
INSERT INTO timers (user_id, start_time, duration, block, machine, status)
- VALUES ('{session_key}', '{now.isoformat()}', {data.block}, {data.machine}, {data.duration * 30}, 'RUNNING')
+ VALUES ('{session_key}', '{now.isoformat()}', {data.duration * 30}, {data.block}, {data.machine}, 'RUNNING')
""")
conn.commit()
cursor.execute("SELECT * FROM timers;")
out = cursor.fetchall()
+
for row in out:
print(row)
@@ -151,9 +187,14 @@ async def start_new_timer(data: RequestData, response: fastapi.Response, session
# --- check whether user has laundry or not
@app.post("/check", response_class=PlainTextResponse)
-def check_status(session_key: Annotated[str | None, fastapi.Cookie()] = None):
+def check_status(response: fastapi.Response, session_key: Annotated[str | None, fastapi.Cookie()] = None):
+ if not session_key:
+ print("no session key, creating.")
+ session_key = create_session(response)
+
cursor.execute(f"SELECT * FROM timers WHERE user_id = '{session_key}'")
out = cursor.fetchall()
+
for row in out:
print(row)
@@ -178,6 +219,7 @@ def get_laundry_info(session_key: Annotated[str | None, fastapi.Cookie()] = None
cursor.execute(f"SELECT * FROM timers WHERE user_id = '{session_key}'")
out = cursor.fetchall()
+
for row in out:
curr_timer = {
"duration": 0,
@@ -185,9 +227,9 @@ def get_laundry_info(session_key: Annotated[str | None, fastapi.Cookie()] = None
"machine": 0,
"status": "RUNNING",
}
- curr_timer["duration"] = row[5]
+ curr_timer["duration"] = row[3]
curr_timer["start_time"] = row[2]
- curr_timer["machine"] = row[4]
+ curr_timer["machine"] = row[5]
curr_timer["status"] = row[6]
result.append(curr_timer)