import logging from fastapi import FastAPI from app.api.router import api_router from app.core.config import get_settings from app.core.middleware import install_middleware logger = logging.getLogger("gsfdc.startup") def prepare_runtime() -> None: settings = get_settings() if not settings.database_url.strip(): return import app.models.about # noqa: F401 import app.models.content # noqa: F401 import app.models.home # noqa: F401 import app.models.report_filing # noqa: F401 import app.models.legal # noqa: F401 import app.models.discipline # noqa: F401 import app.models.expert # noqa: F401 import app.models.member # noqa: F401 import app.models.uploaded_case # noqa: F401 import app.models.rbac # noqa: F401 import app.models.security # noqa: F401 from app.db import Base, SessionLocal, get_engine from app.models.content import ensure_site_defaults from app.models.home import ( ensure_article_body_capacity, ensure_home_templates, ensure_hot_link_slots, retire_removed_shortcut_keys, ) from app.models.uploaded_case import ensure_uploaded_case_columns from app.services.ip_guard import seed_ip_blacklist engine = get_engine() Base.metadata.create_all(bind=engine) SessionLocal.configure(bind=engine) db = SessionLocal() try: ensure_site_defaults(db) ensure_home_templates(db) ensure_hot_link_slots(db) retire_removed_shortcut_keys(db) ensure_article_body_capacity(db) ensure_uploaded_case_columns(db) seed_ip_blacklist(db) from app.commands.create_superuser import ( ensure_about_menu, ensure_directory_menu, ensure_expert_menu, ensure_home_menu, ensure_library_menu, ensure_party_menu, ensure_report_menu, ensure_discipline_menu, ensure_edu_menu, ensure_tech_menu, ) ensure_home_menu(db) ensure_about_menu(db) ensure_directory_menu(db) ensure_party_menu(db) ensure_expert_menu(db) ensure_library_menu(db) ensure_report_menu(db) ensure_discipline_menu(db) ensure_tech_menu(db) ensure_edu_menu(db) db.commit() finally: db.close() if settings.minio_endpoint.strip(): try: from app.services.storage import ensure_buckets ensure_buckets() except Exception: logger.warning("对象存储初始化失败") def create_app() -> FastAPI: settings = get_settings() app = FastAPI(title=settings.app_name, docs_url="/docs", openapi_url="/openapi.json") install_middleware(app) app.include_router(api_router) prepare_runtime() return app app = create_app()