from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.config import API_TITLE, API_VERSION from app.routers import jokes_router, categories_router, auth_router, admin_router, settings_router, links_router, feedback_router, generate_router from app.routers.submit import router as submit_router from app.database import Base, engine from app.models.setting import AiSetting from app.models.link import Link from app.models.feedback import Feedback # 注册模型,确保 create_all 能看到 # 创建新表(如果不存在) Base.metadata.create_all(bind=engine) # 对已有表新增字段的兼容迁移(SQLite 不支持 ALTER TABLE ADD COLUMN IF NOT EXISTS) def _migrate_db(): from sqlalchemy import inspect, text inspector = inspect(engine) columns = [c["name"] for c in inspector.get_columns("jokes")] if "dislike_count" not in columns: with engine.connect() as conn: conn.execute(text("ALTER TABLE jokes ADD COLUMN dislike_count INTEGER DEFAULT 0")) conn.commit() _migrate_db() # Create FastAPI application app = FastAPI(title=API_TITLE, version=API_VERSION) # Configure CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Mount routers app.include_router(jokes_router, prefix="/api") app.include_router(categories_router, prefix="/api") app.include_router(auth_router, prefix="/api") app.include_router(admin_router, prefix="/api") app.include_router(settings_router, prefix="/api") app.include_router(links_router, prefix="/api") app.include_router(feedback_router, prefix="/api") app.include_router(generate_router, prefix="/api") app.include_router(submit_router, prefix="/api/jokes") # 公开提交接口 @app.get("/") def root(): return {"message": "欢迎使用笑话大全 API"} @app.get("/health") def health_check(): return {"status": "healthy"}