From 3f96c9c6502243b06efd4bb34a189e72e3a5557c Mon Sep 17 00:00:00 2001
From: yearning <10538594+wangweifeng1999@user.noreply.gitee.com>
Date: 星期一, 28 九月 2026 19:24:55 +0800
Subject: [PATCH] 复制项目

---
 backend/app/main.py |   66 +++++++++++++++++++++++++++++++++
 1 files changed, 66 insertions(+), 0 deletions(-)

diff --git a/backend/app/main.py b/backend/app/main.py
new file mode 100644
index 0000000..dfd53c4
--- /dev/null
+++ b/backend/app/main.py
@@ -0,0 +1,66 @@
+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")

--
Gitblit v1.8.0