yearning
11 小时以前 3f96c9c6502243b06efd4bb34a189e72e3a5557c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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")