95 lines
2.8 KiB
Python
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()
|