| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- """FastAPI 应用入口"""
- from contextlib import asynccontextmanager
- from fastapi import FastAPI
- from fastapi.middleware.cors import CORSMiddleware
- from app.core.config import settings
- from app.core.database import engine, SessionLocal
- from app.core.api_request_log_middleware import ApiRequestLogMiddleware
- from app.models import models # noqa: F401
- from app.api import (
- public_router,
- admin_router,
- deliver_router,
- mini_client_router,
- mini_client_extra_router,
- mini_common_router,
- mini_message_router,
- mini_supplier_router,
- delivery_router,
- mini_deliverer_router,
- upload_router,
- order_adjust_router,
- payment_router,
- attachment_router,
- invoice_router,
- system_config_router,
- delivery_warning_router,
- message_router,
- menu_router,
- system_router,
- product_banner_router,
- product_detail_media_router,
- product_parameter_router,
- category_parameter_router,
- product_parameter_value_router,
- product_review_router,
- mini_review_router,
- )
- @asynccontextmanager
- async def lifespan(app: FastAPI):
- """应用生命周期管理"""
- # 启动时执行
- from app.core import login_crypto
- login_crypto.ensure_initialized()
- from app.tasks import init_scheduled_tasks
- try:
- init_scheduled_tasks(SessionLocal)
- except Exception as e:
- import logging
- logging.warning(f"定时任务调度器启动失败: {e}")
- yield
- # 关闭时执行
- from app.tasks import shutdown_scheduler
- try:
- shutdown_scheduler()
- except Exception:
- pass
- app = FastAPI(
- title=settings.APP_NAME,
- description="叁强鲜配平台后端API",
- version="1.0.0",
- docs_url="/docs",
- redoc_url="/redoc",
- lifespan=lifespan
- )
- # CORS 跨域配置
- app.add_middleware(
- CORSMiddleware,
- allow_origins=settings.BACKEND_CORS_ORIGINS,
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
- )
- app.add_middleware(ApiRequestLogMiddleware)
- # 注册路由
- app.include_router(public_router, prefix=settings.API_V1_PREFIX)
- app.include_router(admin_router, prefix=settings.API_V1_PREFIX)
- app.include_router(deliver_router, prefix=settings.API_V1_PREFIX)
- app.include_router(mini_client_router)
- app.include_router(mini_supplier_router)
- app.include_router(delivery_router, prefix=settings.API_V1_PREFIX)
- app.include_router(mini_deliverer_router)
- app.include_router(mini_client_extra_router)
- app.include_router(mini_common_router)
- app.include_router(mini_message_router)
- app.include_router(upload_router)
- app.include_router(order_adjust_router)
- app.include_router(payment_router)
- app.include_router(attachment_router)
- app.include_router(invoice_router)
- app.include_router(system_config_router)
- app.include_router(delivery_warning_router)
- app.include_router(message_router)
- app.include_router(menu_router, prefix=settings.API_V1_PREFIX)
- app.include_router(system_router, prefix=settings.API_V1_PREFIX)
- app.include_router(product_banner_router, prefix=settings.API_V1_PREFIX)
- app.include_router(product_detail_media_router, prefix=settings.API_V1_PREFIX)
- app.include_router(product_parameter_router, prefix=settings.API_V1_PREFIX)
- app.include_router(category_parameter_router, prefix=settings.API_V1_PREFIX)
- app.include_router(product_parameter_value_router, prefix=settings.API_V1_PREFIX)
- app.include_router(product_review_router, prefix=settings.API_V1_PREFIX)
- app.include_router(mini_review_router)
- @app.get("/")
- def root():
- """根路径"""
- return {
- "name": settings.APP_NAME,
- "version": "1.0.0",
- "docs": "/docs"
- }
- @app.get("/health")
- def health_check():
- """健康检查"""
- return {"status": "healthy"}
|