Files
moss-ai/app/backend-python/__main__.py

103 lines
2.9 KiB
Python
Raw Normal View History

2025-12-15 22:05:56 +08:00
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",
)