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