liumaolin
添加设置相关的API路由
15ab478
from typing import Dict, Any
from fastapi import FastAPI, HTTPException, APIRouter
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import RedirectResponse
from fastapi.staticfiles import StaticFiles
from voice_dialogue.config.paths import FRONTEND_ASSETS_PATH
from voice_dialogue.utils.logger import logger
from .core.config import AppConfig
from .core.lifespan import lifespan
from .middleware.logging import LoggingMiddleware
from .middleware.rate_limit import RateLimitMiddleware
from .routes import tts_routes, asr_routes, system_routes, websocket_routes, settings_routes
def create_app() -> FastAPI:
"""创建并配置FastAPI应用"""
# 应用配置
config = AppConfig()
# 创建FastAPI应用
app = FastAPI(
title=config.title,
description=config.description,
version=config.version,
docs_url=config.docs_url,
redoc_url=config.redoc_url,
lifespan=lifespan,
)
# 添加CORS中间件
app.add_middleware(CORSMiddleware, **config.get_cors_config())
# 添加自定义中间件
app.add_middleware(LoggingMiddleware)
app.add_middleware(RateLimitMiddleware)
# 注册路由
_register_routes(app)
# 注册异常处理器
_register_exception_handlers(app)
# 添加静态文件路由
app.mount("/app", StaticFiles(directory=FRONTEND_ASSETS_PATH.as_posix(), html=True), name="static")
return app
def _register_routes(app: FastAPI):
"""注册所有路由"""
# API路由
v1_router = APIRouter(prefix="/api/v1")
v1_router.include_router(tts_routes.router, prefix="/tts", tags=["TTS模型管理"])
v1_router.include_router(asr_routes.router, prefix="/asr", tags=["ASR模型管理"])
v1_router.include_router(system_routes.router, prefix="/system", tags=["系统管理"])
v1_router.include_router(settings_routes.router, prefix="/settings", tags=["设置管理"])
app.include_router(v1_router)
app.add_websocket_route("/api/v1/ws", websocket_routes.ws)
# 根路径和健康检查
_register_health_routes(app)
def _register_health_routes(app: FastAPI):
"""注册健康检查路由"""
@app.get("/")
async def root():
return RedirectResponse(url='/app/')
def _get_service_status(app_state: Dict[str, Any]) -> dict:
"""获取服务状态信息"""
service_manager = app_state.get("service_manager")
if service_manager:
return service_manager.get_service_status()
return {"total_services": 0, "services": {}}
def _register_exception_handlers(app: FastAPI):
"""注册全局异常处理器"""
@app.exception_handler(Exception)
async def global_exception_handler(request, exc):
logger.error(f"未处理的异常: {exc}", exc_info=True)
return HTTPException(
status_code=500,
detail="内部服务器错误"
)
# 创建应用实例
app = create_app()