Files
moss-ai/app/backend-python/__main__.py
雷雨 8635b84b2d init
2025-12-15 22:05:56 +08:00

103 lines
2.9 KiB
Python

import logging
import sys
from pathlib import Path
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
import uvicorn
current_dir = Path(__file__).parent
if str(current_dir) not in sys.path:
sys.path.insert(0, str(current_dir))
from api.chat import router as chat_router
from api.config import router as config_router
from api.xiaomi_auth import router as xiaomi_router
from api.dida_auth import router as dida_router
from api.auth import router as auth_router
from api.conversation import router as conversation_router
from api.device_operations import router as device_operations_router
from config import settings
from database import init_database, DatabaseConnectionError
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
try:
init_database(strict_mode=True)
except DatabaseConnectionError as e:
logger.error(f"❌ 数据库初始化失败: {e}")
sys.exit(1)
except Exception as e:
logger.error(f"❌ 未知错误,请联系开发者解决: {e}")
sys.exit(1)
yield
logger.info("👋 Moss AI 后端服务关闭")
app = FastAPI(
title="Moss AI Backend API",
description="智能家居系统后端服务",
version="1.0.0",
lifespan=lifespan,
)
# 配置 CORS
app.add_middleware(
CORSMiddleware,
allow_origins=settings.CORS_ORIGINS,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(chat_router, prefix="/api/v1", tags=["Chat"])
app.include_router(conversation_router, prefix="/api/v1", tags=["Conversation"])
app.include_router(config_router, prefix="/api/v1/config", tags=["Config"])
app.include_router(xiaomi_router, prefix="/api/v1/xiaomi", tags=["Xiaomi Auth"])
app.include_router(dida_router, prefix="/api/v1/dida", tags=["Dida Auth"])
app.include_router(auth_router, prefix="/api/v1/auth", tags=["Authentication"])
app.include_router(device_operations_router, prefix="/api/v1", tags=["Device Operations"])
@app.get("/")
async def root():
return {
"name": "Moss AI Backend API",
"version": "1.0.0",
"status": "运行中",
"warning": "请浏览正确路径,不要浏览错误路径",
}
@app.exception_handler(Exception)
async def global_exception_handler(request, exc):
logger.error(f"全局异常,请联系开发者解决: {exc}", exc_info=True)
return JSONResponse(
status_code=500,
content={
"error": "内部服务器错误",
"message": str(exc),
}
)
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"__main__:app",
host=settings.HOST,
port=settings.PORT,
reload=settings.DEBUG,
log_level="info",
http="h11",
)