app.py 1.54 KB
"""
FastAPI 主应用
提供 AI 补货建议系统的 REST API
"""

import logging
from pathlib import Path
from contextlib import asynccontextmanager

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse

from .routes import tasks

logger = logging.getLogger(__name__)


@asynccontextmanager
async def lifespan(app: FastAPI):
    """应用生命周期管理"""
    logger.info("API 服务启动")
    yield
    logger.info("API 服务关闭")


app = FastAPI(
    title="AI 补货建议系统 API",
    description="提供补货任务、明细的查询接口",
    version="1.0.0",
    lifespan=lifespan,
)

# CORS 配置
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

# 挂载路由
app.include_router(tasks.router, prefix="/api", tags=["Tasks"])

# 静态文件服务
ui_path = Path(__file__).parent.parent.parent.parent / "ui"
if ui_path.exists():
    app.mount("/css", StaticFiles(directory=ui_path / "css"), name="css")
    app.mount("/js", StaticFiles(directory=ui_path / "js"), name="js")


@app.get("/", include_in_schema=False)
async def serve_index():
    """服务主页面"""
    index_file = ui_path / "index.html"
    if index_file.exists():
        return FileResponse(index_file)
    return {"message": "AI 补货建议系统 API", "docs": "/docs"}


@app.get("/health")
async def health_check():
    """健康检查"""
    return {"status": "ok"}