astock-agent/backend/app/main.py
2026-04-07 20:51:00 +08:00

69 lines
1.7 KiB
Python

"""A 股分析推荐 Agent - FastAPI 入口"""
import logging
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.config import settings
from app.db.database import init_db
from app.engine.scheduler import start_scheduler, stop_scheduler
from app.api import market, sectors, recommendations, stocks, websocket, chat
logging.basicConfig(
level=logging.DEBUG if settings.debug else logging.INFO,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
logger = logging.getLogger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
# 启动
logger.info("A 股分析推荐 Agent 启动中...")
await init_db()
logger.info("数据库初始化完成")
start_scheduler()
logger.info("调度器已启动")
yield
# 关闭
stop_scheduler()
logger.info("服务已关闭")
app = FastAPI(
title="A 股分析推荐 Agent",
description="基于资金驱动的四层漏斗模型,盘中实时分析推荐 A 股",
version="1.0.0",
lifespan=lifespan,
)
# CORS
app.add_middleware(
CORSMiddleware,
allow_origins=[settings.frontend_url, "http://localhost:3000"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# 路由
app.include_router(market.router)
app.include_router(sectors.router)
app.include_router(recommendations.router)
app.include_router(stocks.router)
app.include_router(chat.router)
# WebSocket
app.websocket("/ws")(websocket.ws_endpoint)
@app.get("/api/health")
async def health():
return {
"status": "ok",
"service": "astock-agent",
"llm_enabled": bool(settings.deepseek_api_key),
}