from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from contextlib import asynccontextmanager import os from app.db import Base, engine from app.routers import assistants, history, knowledge @asynccontextmanager async def lifespan(app: FastAPI): # 启动时创建表 Base.metadata.create_all(bind=engine) yield app = FastAPI( title="AI VideoAssistant API", description="Backend API for AI VideoAssistant", version="1.0.0", lifespan=lifespan ) # CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # 路由 app.include_router(assistants.router, prefix="/api") app.include_router(history.router, prefix="/api") app.include_router(knowledge.router, prefix="/api") @app.get("/") def root(): return {"message": "AI VideoAssistant API", "version": "1.0.0"} @app.get("/health") def health(): return {"status": "ok"} # 初始化默认数据 @app.on_event("startup") def init_default_data(): from sqlalchemy.orm import Session from app.db import SessionLocal from app.models import Voice db = SessionLocal() try: # 检查是否已有数据 if db.query(Voice).count() == 0: # 插入默认声音 voices = [ Voice(id="v1", name="Xiaoyun", vendor="Ali", gender="Female", language="zh", description="Gentle and professional."), Voice(id="v2", name="Kevin", vendor="Volcano", gender="Male", language="en", description="Deep and authoritative."), Voice(id="v3", name="Abby", vendor="Minimax", gender="Female", language="en", description="Cheerful and lively."), Voice(id="v4", name="Guang", vendor="Ali", gender="Male", language="zh", description="Standard newscast style."), Voice(id="v5", name="Doubao", vendor="Volcano", gender="Female", language="zh", description="Cute and young."), ] for v in voices: db.add(v) db.commit() print("✅ 默认声音数据已初始化") finally: db.close()