Files
gsfdc/server/app/main.py
T

95 lines
2.8 KiB
Python

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()