from pathlib import Path
|
|
from fastapi import FastAPI
|
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.staticfiles import StaticFiles
|
|
from app.config import settings
|
from app.database import Base, engine
|
from app.routers import (
|
admin_graders_router,
|
admin_import_router,
|
attempts_router,
|
auth_router,
|
scores_router,
|
settings_router,
|
)
|
from app.system_settings import ensure_upload_dir
|
|
app = FastAPI(title="考试阅卷系统")
|
|
origins = [o.strip() for o in settings.cors_origins.split(",") if o.strip()]
|
app.add_middleware(
|
CORSMiddleware,
|
allow_origins=origins,
|
allow_credentials=True,
|
allow_methods=["*"],
|
allow_headers=["*"],
|
)
|
|
app.include_router(auth_router.router)
|
app.include_router(scores_router.router)
|
app.include_router(attempts_router.router)
|
app.include_router(admin_import_router.router)
|
app.include_router(admin_graders_router.router)
|
app.include_router(settings_router.router)
|
|
|
@app.on_event("startup")
|
def startup():
|
import app.models # noqa: F401 — 注册全部 ORM 表
|
|
Path(settings.database_url.replace("sqlite:///", "")).parent.mkdir(parents=True, exist_ok=True)
|
ensure_upload_dir()
|
Base.metadata.create_all(bind=engine)
|
with engine.begin() as conn:
|
conn.exec_driver_sql("CREATE INDEX IF NOT EXISTS ix_users_role ON users (role)")
|
try:
|
conn.exec_driver_sql(
|
"ALTER TABLE import_batch ADD COLUMN exam_ids_json TEXT NOT NULL DEFAULT '[]'"
|
)
|
except Exception:
|
pass
|
|
from app.database import SessionLocal
|
from app.system_settings import get_or_create_settings
|
|
db = SessionLocal()
|
try:
|
get_or_create_settings(db)
|
finally:
|
db.close()
|
|
|
dist = Path(__file__).resolve().parents[2] / "frontend" / "dist"
|
if dist.exists():
|
app.mount("/", StaticFiles(directory=str(dist), html=True), name="static")
|