from fastapi import FastAPI from fastapi.exceptions import RequestValidationError from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.gzip import GZipMiddleware from starlette.exceptions import HTTPException as StarletteHTTPException from app.api.router import api_router, health_router from app.config import settings from app.middleware.exceptions import ( APIException, api_exception_handler, general_exception_handler, http_exception_handler, validation_exception_handler, ) from app.middleware.logging import RequestLoggingMiddleware app = FastAPI( title="小虾 SaaS API", description="自动化剪辑 SaaS 平台 API", version=settings.APP_VERSION, docs_url="/docs", redoc_url="/redoc", ) app.add_exception_handler(APIException, api_exception_handler) app.add_exception_handler(StarletteHTTPException, http_exception_handler) app.add_exception_handler(RequestValidationError, validation_exception_handler) app.add_exception_handler(Exception, general_exception_handler) app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.add_middleware(GZipMiddleware, minimum_size=1000) app.add_middleware(RequestLoggingMiddleware) app.include_router(health_router) app.include_router(api_router) @app.get("/") async def root(): return { "service": settings.APP_NAME, "status": "running", "version": settings.APP_VERSION, } if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)