172 lines
7.0 KiB
Python
172 lines
7.0 KiB
Python
"""FastAPI 应用入口。
|
|
|
|
注册中间件、路由、异常处理。
|
|
"""
|
|
|
|
import uuid
|
|
from contextlib import asynccontextmanager
|
|
|
|
from fastapi import FastAPI, Request
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from app.routers.auth import router as auth_router
|
|
from app.routers.companies import router as companies_router
|
|
from app.routers.copilot import router as copilot_router
|
|
from app.routers.dashboard import router as dashboard_router
|
|
from app.routers.reports import router as reports_router
|
|
from app.routers.reports_export import router as reports_export_router
|
|
from app.routers.risks import router as risks_router
|
|
|
|
# Phase 2 路由
|
|
from app.routers.financial import router as financial_router
|
|
from app.routers.agreements import router as agreements_router
|
|
from app.routers.board import router as board_router
|
|
from app.routers.weak_signals import router as weak_signals_router
|
|
from app.routers.decision_sentinels import router as decision_sentinels_router
|
|
from app.routers.events import router as events_router, router_inquiries as inquiries_router
|
|
from app.routers.profiles import router as profiles_router
|
|
from app.routers.admin import router as admin_router
|
|
from app.routers.founder import router as founder_router
|
|
|
|
# Phase 3 路由
|
|
from app.routers.synergies import router as synergies_router
|
|
from app.routers.innovation import router as innovation_router
|
|
from app.routers.talents import router as talents_router
|
|
from app.routers.customer_plans import router as customer_plans_router
|
|
from app.routers.okrs import router as okrs_router
|
|
from app.routers.nudges import router as nudges_router
|
|
from app.routers.peer_circles import router as peer_circles_router
|
|
from app.routers.product_diagnostics import router as product_diagnostics_router
|
|
from app.routers.milestones import router as milestones_router
|
|
from app.routers.advanced_analysis import router as advanced_analysis_router
|
|
from app.routers.tasks import router_tasks as tasks_router, router_comments as comments_router
|
|
from app.routers.customer_success import router as customer_success_router
|
|
|
|
# Phase 4 路由
|
|
from app.routers.alpha import router as alpha_router
|
|
from app.routers.exit_predictions import router as exit_predictions_router
|
|
from app.routers.portfolio import router as portfolio_router
|
|
from app.routers.digital_twins import router as digital_twins_router
|
|
from app.routers.knowledge_graph import router as knowledge_graph_router
|
|
from app.routers.aars import router as aars_router
|
|
from app.routers.pre_mortems import router_pre_mortem as pre_mortems_router, router_red_team as red_teams_router
|
|
from app.routers.agent_executions import router as agent_executions_router
|
|
from app.routers.knowledge import router as knowledge_router
|
|
from app.routers.data_sources import router as data_sources_router
|
|
from app.routers.industry_research import router as industry_research_router
|
|
from app.routers.funds import router as funds_router
|
|
from app.routers.evaluation import router as evaluation_router
|
|
from app.schemas.common import error
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
"""应用生命周期管理。"""
|
|
# startup — 初始化预设评价模板
|
|
from app.core.database import async_session_factory
|
|
from app.services.evaluation_presets import seed_evaluation_templates
|
|
|
|
async with async_session_factory() as session:
|
|
await seed_evaluation_templates(session)
|
|
await session.commit()
|
|
|
|
yield
|
|
# shutdown
|
|
|
|
|
|
app = FastAPI(
|
|
title="AIPortPilot",
|
|
description="AI+ Portfolio Operating System — 投后管理与组合协同平台",
|
|
version="0.1.0",
|
|
lifespan=lifespan,
|
|
)
|
|
|
|
# CORS
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["http://localhost:3000"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
|
|
@app.middleware("http")
|
|
async def trace_id_middleware(request: Request, call_next):
|
|
"""为每个请求注入 trace_id。"""
|
|
trace_id = request.headers.get("X-Trace-Id", str(uuid.uuid4()))
|
|
request.state.trace_id = trace_id
|
|
response = await call_next(request)
|
|
response.headers["X-Trace-Id"] = trace_id
|
|
return response
|
|
|
|
|
|
@app.exception_handler(Exception)
|
|
async def global_exception_handler(request: Request, exc: Exception):
|
|
"""全局异常处理。"""
|
|
trace_id = getattr(request.state, "trace_id", str(uuid.uuid4()))
|
|
return JSONResponse(
|
|
status_code=500,
|
|
content=error(code=-1, message="内部服务器错误"),
|
|
headers={"X-Trace-Id": trace_id},
|
|
)
|
|
|
|
|
|
@app.get("/health")
|
|
async def health_check():
|
|
"""健康检查端点。"""
|
|
return {"status": "ok", "service": "aiportpilot-backend", "version": "0.1.0"}
|
|
|
|
|
|
app.include_router(auth_router, prefix="/api/v1")
|
|
app.include_router(companies_router, prefix="/api/v1")
|
|
app.include_router(reports_router, prefix="/api/v1")
|
|
app.include_router(dashboard_router, prefix="/api/v1")
|
|
app.include_router(risks_router, prefix="/api/v1")
|
|
app.include_router(copilot_router, prefix="/api/v1")
|
|
app.include_router(reports_export_router, prefix="/api/v1")
|
|
|
|
# Phase 2
|
|
app.include_router(financial_router, prefix="/api/v1")
|
|
app.include_router(agreements_router, prefix="/api/v1")
|
|
app.include_router(board_router, prefix="/api/v1")
|
|
app.include_router(weak_signals_router, prefix="/api/v1")
|
|
app.include_router(decision_sentinels_router, prefix="/api/v1")
|
|
app.include_router(events_router, prefix="/api/v1")
|
|
app.include_router(inquiries_router, prefix="/api/v1")
|
|
app.include_router(profiles_router, prefix="/api/v1")
|
|
app.include_router(admin_router, prefix="/api/v1")
|
|
app.include_router(founder_router, prefix="/api/v1")
|
|
|
|
# Phase 3
|
|
app.include_router(synergies_router, prefix="/api/v1")
|
|
app.include_router(innovation_router, prefix="/api/v1")
|
|
app.include_router(talents_router, prefix="/api/v1")
|
|
app.include_router(customer_plans_router, prefix="/api/v1")
|
|
app.include_router(okrs_router, prefix="/api/v1")
|
|
app.include_router(nudges_router, prefix="/api/v1")
|
|
app.include_router(peer_circles_router, prefix="/api/v1")
|
|
app.include_router(product_diagnostics_router, prefix="/api/v1")
|
|
app.include_router(milestones_router, prefix="/api/v1")
|
|
app.include_router(advanced_analysis_router, prefix="/api/v1")
|
|
app.include_router(tasks_router, prefix="/api/v1")
|
|
app.include_router(comments_router, prefix="/api/v1")
|
|
app.include_router(customer_success_router, prefix="/api/v1")
|
|
|
|
# Phase 4
|
|
app.include_router(alpha_router, prefix="/api/v1")
|
|
app.include_router(exit_predictions_router, prefix="/api/v1")
|
|
app.include_router(portfolio_router, prefix="/api/v1")
|
|
app.include_router(digital_twins_router, prefix="/api/v1")
|
|
app.include_router(knowledge_graph_router, prefix="/api/v1")
|
|
app.include_router(aars_router, prefix="/api/v1")
|
|
app.include_router(pre_mortems_router, prefix="/api/v1")
|
|
app.include_router(red_teams_router, prefix="/api/v1")
|
|
app.include_router(agent_executions_router, prefix="/api/v1")
|
|
app.include_router(knowledge_router, prefix="/api/v1")
|
|
app.include_router(data_sources_router, prefix="/api/v1")
|
|
app.include_router(industry_research_router, prefix="/api/v1")
|
|
app.include_router(funds_router, prefix="/api/v1")
|
|
app.include_router(evaluation_router, prefix="/api/v1")
|