66 lines
2.0 KiB
Python
66 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
from contextlib import asynccontextmanager
|
|
|
|
from fastapi import FastAPI, HTTPException, Request
|
|
from fastapi.responses import JSONResponse
|
|
|
|
from app.api.agent.tasks import router as task_router
|
|
from app.api.demo.approval import router as demo_approval_router
|
|
from app.api.demo.identity import router as demo_identity_router
|
|
from app.api.demo.software_a import router as demo_software_a_router
|
|
from app.api.edge.tasks import router as edge_router
|
|
from app.core.config import ensure_runtime_directories, get_settings
|
|
from app.core.time import format_now
|
|
from app.db.base import Base
|
|
from app.db.session import engine
|
|
from app.models.approval import ApprovalRequest
|
|
from app.models.audit_log import AuditLog
|
|
from app.models.edge_node import EdgeNode
|
|
from app.models.edge_task import EdgeTask
|
|
from app.models.task import Task
|
|
from app.models.tool_call import ToolCall
|
|
|
|
settings = get_settings()
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(_: FastAPI):
|
|
ensure_runtime_directories()
|
|
Base.metadata.create_all(bind=engine)
|
|
yield
|
|
|
|
|
|
app = FastAPI(
|
|
title="智能化部署 Agent Demo Backend",
|
|
version="0.1.0",
|
|
lifespan=lifespan,
|
|
)
|
|
|
|
|
|
@app.exception_handler(HTTPException)
|
|
async def http_exception_handler(_: Request, exc: HTTPException) -> JSONResponse:
|
|
detail = exc.detail if isinstance(exc.detail, dict) else {"code": "INTERNAL_ERROR", "message": str(exc.detail)}
|
|
return JSONResponse(
|
|
status_code=exc.status_code,
|
|
content={
|
|
"request_id": "req-exception",
|
|
"success": False,
|
|
"code": detail.get("code", "INTERNAL_ERROR"),
|
|
"message": detail.get("message", "request failed"),
|
|
"data": {},
|
|
"timestamp": format_now(settings.default_timezone),
|
|
},
|
|
)
|
|
|
|
|
|
@app.get("/healthz")
|
|
def healthz() -> dict[str, str]:
|
|
return {"status": "ok"}
|
|
|
|
|
|
app.include_router(task_router)
|
|
app.include_router(demo_identity_router)
|
|
app.include_router(demo_approval_router)
|
|
app.include_router(demo_software_a_router)
|
|
app.include_router(edge_router)
|