Files
image-suite-studio/server/main.py
T

60 lines
1.6 KiB
Python

"""电商套图工作台 - FastAPI 入口。"""
from __future__ import annotations
import logging
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from api import collection, generate, products, proxy, suites
from config import get_settings
from db import init_db
from services.storage import media_root
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s: %(message)s")
@asynccontextmanager
async def lifespan(app: FastAPI):
await init_db()
yield
app = FastAPI(title="电商套图工作台", version="0.1.0", lifespan=lifespan)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 插件 background 无 CORS 限制,这里兜底
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(collection.router)
app.include_router(products.router)
app.include_router(suites.router)
app.include_router(generate.router)
app.include_router(proxy.router)
# 静态托管生成的图片/转存素材
app.mount("/media", StaticFiles(directory=str(media_root())), name="media")
@app.get("/api/health")
async def health():
settings = get_settings()
return {
"ok": True,
"provider": settings.image_provider,
"ark_configured": bool(settings.ark_api_key),
"dashscope_configured": bool(settings.dashscope_api_key),
}
if __name__ == "__main__":
import uvicorn
settings = get_settings()
uvicorn.run("main:app", host=settings.host, port=settings.port, reload=False)