from datetime import datetime, timezone from fastapi import FastAPI, status from fastapi.staticfiles import StaticFiles from sqlmodel import ARRAY, Column, SQLModel, Field, Session, String, create_engine from fastapi.middleware.cors import CORSMiddleware with open("db.secrets", "r") as f: db_secrets = f.readline().strip() app = FastAPI(title="cutt") engine = create_engine(db_secrets) origins = [ "*", "http://localhost", "http://localhost:3000", "http://localhost:8000", ] app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) class Chemistry(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) time: datetime | None = Field(default_factory=datetime.now) user: str love: list[str] = Field(sa_column=Column(ARRAY(String))) hate: list[str] = Field(sa_column=Column(ARRAY(String))) undecided: list[str] = Field(sa_column=Column(ARRAY(String))) def utctime(): return datetime.now(tz=timezone.utc) class MVPRanking(SQLModel, table=True): id: int | None = Field(default=None, primary_key=True) time: datetime | None = Field(default_factory=utctime) user: str mvps: list[str] = Field(sa_column=Column(ARRAY(String))) SQLModel.metadata.create_all(engine) @app.post("/mvps/", status_code=status.HTTP_200_OK) def submit_mvps(mvps: MVPRanking): with Session(engine) as session: session.add(mvps) session.commit() @app.post("/chemistry/", status_code=status.HTTP_200_OK) def submit_chemistry(chemistry: Chemistry): with Session(engine) as session: session.add(chemistry) session.commit() app.mount("/", StaticFiles(directory="dist", html=True), name="site")